# Semgrep

## Overview

Semgrep — это SAST-сканер (Static Application Security Testing), который анализирует исходный код и ищет уязвимости, небезопасные паттерны и нарушения best practices на основе правил (rules).

## Requirements

* В **Sequences** перед этим инструментом должен быть добавлен job **Code Downloader**

## How it works

TRAIO запускает Semgrep одной командой и сохраняет JSON-отчёт в `/data/$REPORT_FILE_NAME`.

Команда запуска:

1. Semgrep сканирует текущую директорию `./`
2. Правила задаются через переменную `SEC_SEMGREP_CONFIG`
3. Исключаемые пути задаются через `SEC_SEMGREP_EXCLUDE`
4. Отчёт сохраняется в JSON через `--json --output /data/$REPORT_FILE_NAME`
5. `--metrics=off` отключает сбор/отправку метрик Semgrep

Сканер использует официальный docker-образ:

`semgrep/semgrep:latest`

Пример команды:

`semgrep scan --config $SEC_SEMGREP_CONFIG --exclude $SEC_SEMGREP_EXCLUDE --json --output /data/$REPORT_FILE_NAME --metrics=off ./`

## Variables

| Name                  | Default value       | Required | Description                                                                                                                   |
| --------------------- | ------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
| REPORT\_FILE\_NAME    | semgrep.json        | false    | Имя JSON-файла отчёта, который будет создан в `/data/`.                                                                       |
| SCAN\_TYPE            | Semgrep JSON Report | false    | Тип скана для отображения/парсинга в TRAIO.                                                                                   |
| SEC\_SEMGREP\_CONFIG  | p/default           | false    | Набор правил Semgrep. Можно указать Semgrep Registry pack (например `p/default`, `p/ci`) или путь/URL к собственному конфигу. |
| SEC\_SEMGREP\_EXCLUDE | /tests              | false    | Путь/паттерн, который Semgrep должен исключить из анализа (например тесты).                                                   |

## Notes

* **Про `--quiet`:** если нужно меньше шума в логах, можно добавить `--quiet`.
* **Про исключения:** `--exclude` лучше задавать одним значением. Если нужно исключить много путей, обычно удобнее запускать Semgrep с несколькими `--exclude` или использовать конфиг Semgrep.

## Links

* Semgrep Documentation: <https://semgrep.dev/docs/>
* Semgrep Registry: <https://semgrep.dev/explore>
* Semgrep GitHub: <https://github.com/semgrep/semgrep>
