Zurück zu den Updates
New releaseAug 19, 2026

gosec v2.28.0

Go-Sicherheitsprüfer

Teilen

gosec - Go Security Checker

Untersucht Quellcode auf Sicherheitsprobleme, indem der Go-AST und die SSA-Codedarstellung gescannt werden.

Schnellzugriffe

Funktionen

  • Musterbasierte Regeln zur Erkennung häufiger Sicherheitsprobleme in Go-Code
  • SSA-basierte Analysatoren für Typkonvertierungen, Slice-Grenzen und Krypto-Probleme
  • Taint-Analyse zur Verfolgung des Datenflusses von Benutzereingaben zu gefährlichen Funktionen (SQL-Injection, Command-Injection, Path Traversal, SSRF, XSS, Log-Injection, SMTP-Injection, SSTI, unsichere Deserialisierung, Open Redirect)

Lizenz

Lizenziert unter der Apache License, Version 2.0 (die „License"). Sie dürfen diese Datei nur in Übereinstimmung mit der License verwenden. Eine Kopie der License erhalten Sie hier.

Projektstatus

CII Best Practices Build Status Coverage Status GoReport GoDoc Docs Downloads GHCR Slack go-recipes

Installation

GitHub Action

Sie können gosec wie folgt als GitHub Action ausführen:

Verwenden Sie das versionierte Tag mit @master, das an die neueste stabile Version gebunden ist. Dies gewährleistet ein stabiles Verhalten.

name: Run Gosec
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      GO111MODULE: on
    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Run Gosec Security Scanner
        uses: securego/gosec@master
        with:
          args: ./...

Projekte mit privaten Modulen scannen

Wenn Ihr Projekt private Go-Module importiert, müssen Sie die Authentifizierung konfigurieren, damit gosec die Abhängigkeiten abrufen kann. Legen Sie die folgenden Umgebungsvariablen in Ihrem Workflow fest:

  • GOPRIVATE: Eine durch Kommas getrennte Liste von Modulpfad-Präfixen, die als privat betrachtet werden sollen (z. B. github.com/your-org/*).
  • GITHUB_AUTHENTICATION_TOKEN: Ein GitHub-Token mit Lesezugriff auf Ihre privaten Repositories.
name: Run Gosec
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      GO111MODULE: on
      GOPRIVATE: github.com/your-org/*
      GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Run Gosec Security Scanner
        uses: securego/gosec@v2
        with:
          args: ./...

Integration in die Code-Scanning

Sie können Code-Analyse-Tools von Drittanbietern in das GitHub-Code-Scanning integrieren, indem Sie Daten als SARIF-Dateien hochladen.

Der Workflow zeigt ein Beispiel für die Ausführung von gosec als Schritt in einem GitHub-Action-Workflow, der die Datei results.sarif ausgibt. Anschließend lädt der Workflow die Datei results.sarif mit der Aktion upload-sarif zu GitHub hoch.

name: "Security Scan"

# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
on:
  push:
  schedule:
  - cron: '0 0 * * 0'

jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      GO111MODULE: on
    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Run Gosec Security Scanner
        uses: securego/gosec@v2
        with:
          # we let the report trigger content trigger a failure using the GitHub Security features.
          args: '-no-fail -fmt sarif -out results.sarif ./...'
      - name: Upload SARIF file
        uses: github/codeql-action/upload-sarif@v2
        with:
          # Path to SARIF file relative to the root of the repository
          sarif_file: results.sarif

Go-Analyse

Das Paket goanalysis stellt einen golang.org/x/tools/go/analysis.Analyzer für die Integration mit Tools bereit, die die standardmäßige Go-Analyseschnittstelle unterstützen, wie etwa BazeIs nogo- Framework:

nogo(
    name = "nogo",
    deps = [
        "@com_github_securego_gosec_v2//goanalysis",
        # add more analyzers as needed
    ],
    visibility = ["//visibility:public"],
)

Lokale Installation

gosec erfordert Go 1.25 oder neuer.

go install github.com/securego/gosec/v2/cmd/gosec@latest

Schnellstart

# Scan all packages in current module
gosec ./...

# Write JSON report
gosec -fmt json -out results.json ./...

# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...

Exit-Codes

  • 0: Scan ohne nicht unterdrückte Befunde/Fehler abgeschlossen
  • 1: mindestens ein nicht unterdrückter Befund oder Verarbeitungsfehler
  • Verwenden Sie -no-fail, um immer 0 zurückzugeben

Verwendung

Gosec kann so konfiguriert werden, dass nur eine Teilmenge der Regeln ausgeführt wird, bestimmte Dateipfade ausgeschlossen werden und Berichte in verschiedenen Formaten erzeugt werden. Standardmäßig werden alle Regeln gegen die angegebenen Eingabedateien ausgeführt. Um rekursiv ab dem aktuellen Verzeichnis zu scannen, können Sie ./... als Eingabeargument angeben.

Verfügbare Regeln

gosec enthält Regeln aus diesen Kategorien:

  • G1xx: allgemeine Probleme bei sicherem Coding (zum Beispiel fest codierte Anmeldedaten, unsichere Verwendung, HTTP-Härtung, Cookie-Sicherheit)
  • G2xx: Injektionsrisiken bei der Konstruktion von Abfragen/Templates/Befehlen
  • G3xx: Risiken bei Datei- und Pfadverarbeitung (Berechtigungen, Traversal, temporäre Dateien, Archiv-Extraktion)
  • G4xx: Schwächen in Krypto und TLS
  • G5xx: blockierte Importe
  • G6xx: Go-spezifische Korrektheits-/Sicherheitsprüfungen (zum Beispiel Range-Aliasing und Slice-Grenzen)
  • G7xx: Taint-Analyse-Regeln (SQL-Injection, Command-Injection, Path Traversal, SSRF, XSS, Log-, SMTP-Injection, SSTI, unsichere Deserialisierung und Open Redirect)

Die vollständige Liste, Regelbeschreibungen und die Konfiguration pro Regel finden Sie in RULES.md.

Ausgemusterte Regeln

Kategorien