Назад к обновлениям
New releaseAug 19, 2026

gosec v2.28.0

Сканер безопасности Go

Поделиться

gosec - Средство проверки безопасности Go

Проверяет исходный код на проблемы безопасности путем сканирования AST и SSA представления кода Go.

Быстрые ссылки

Возможности

  • Правила на основе шаблонов для обнаружения типовых проблем безопасности в коде Go
  • Анализаторы на основе SSA для преобразований типов, границ срезов и криптографических проблем
  • Анализ потока данных (taint analysis) для отслеживания потока данных от ввода пользователя к опасным функциям (SQL-инъекции, внедрение команд, обход пути, SSRF, XSS, инъекция в логи, SMTP-инъекции, SSTI, небезопасная десериализация, открытое перенаправление)

Лицензия

Лицензировано в соответствии с Apache License, Version 2.0 («Лицензия»). Вы не можете использовать этот файл иначе как в соответствии с Лицензией. Копию Лицензии можно получить здесь.

Статус проекта

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

Установка

GitHub Action

Вы можете запускать gosec как GitHub action следующим образом:

Используйте тег версии с @master, который привязан к последнему стабильному релизу. Это обеспечит стабильное поведение.```yaml 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: ./...

#### Сканирование проектов с приватными модулями

Если ваш проект импортирует приватные модули Go, необходимо настроить аутентификацию, чтобы `gosec` мог получить зависимости. Установите следующие переменные окружения в вашем рабочем процессе:

- `GOPRIVATE`: список префиксов путей модулей, разделённых запятыми, которые должны считаться приватными (например, `github.com/your-org/*`).
- `GITHUB_AUTHENTICATION_TOKEN`: токен GitHub с правами на чтение ваших частных репозиториев.```yaml
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: ./...

Интеграция с сканированием кода

Вы можете интегрировать сторонние инструменты анализа кода со сканированием кода GitHub, загружая данные в виде файлов SARIF.

В рабочем процессе показан пример запуска gosec как шага в рабочем процессе GitHub Actions, который выводит файл results.sarif. Затем рабочий процесс загружает файл results.sarif на GitHub с помощью действия upload-sarif.```yaml 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 Analysis

Пакет `goanalysis` предоставляет
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
для интеграции с инструментами, поддерживающими стандартный интерфейс анализа Go, такими как фреймворк
[nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst)
от Bazel:```starlark
nogo(
    name = "nogo",
    deps = [
        "@com_github_securego_gosec_v2//goanalysis",
        # add more analyzers as needed
    ],
    visibility = ["//visibility:public"],
)

Локальная установка

gosec требует Go 1.25 или новее.```bash go install github.com/securego/gosec/v2/cmd/gosec@latest

## Быстрый старт```bash
# 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 ./...

Коды завершения

  • 0: сканирование завершено без неподавленных находок/ошибок
  • 1: как минимум одна неподавленная находка или ошибка обработки
  • Используйте -no-fail, чтобы всегда возвращать 0

Использование

Gosec можно настроить на выполнение только подмножества правил, исключение определенных путей файлов и создание отчетов в разных форматах. По умолчанию все правила применяются к переданным входным файлам. Для рекурсивного сканирования из текущего каталога можно указать ./... в качестве аргумента ввода.

Доступные правила

gosec включает правила по следующим категориям:

  • G1xx: общие проблемы безопасного кодирования (например, жестко заданные учетные данные, небезопасное использование, усиление HTTP, безопасность cookies)
  • G2xx: риски внедрения в запросы/шаблоны/команды
  • G3xx: риски работы с файлами и путями (права доступа, обход, временные файлы, извлечение архивов)
  • G4xx: слабости криптографии и TLS
  • G5xx: импорты из черного списка
  • G6xx: специфичные для Go проверки корректности/безопасности (например, псевдонимы диапазонов и границы слайсов)
  • G7xx: правила анализа распространения меток (SQL-инъекции, инъекции команд, обход пути, SSRF, XSS, логи, SMTP-инъекции, SSTI, небезопасная десериализация и открытое перенаправление)

Полный список, описания правил и настройки для каждого правила см. в RULES.md.

Устаревшие правила

Категории