# Gitlab Semgrep

### Описание

Gitlab Semgrep — это статический анализатор кода (SAST), интегрированный в TRAIO и основанный на официальном GitLab Semgrep Analyzer. Поддерживает анализ более 15+ языков программирования с использованием актуальных правил-паттернов GitLab.

### Поддерживаемые языки

Gitlab Semgrep в TRAIO поддерживает сканирование следующих языков:

* **C# (.NET)**
* **C**
* **C++**
* **Go**
* **Kotlin**
* **Java**
* **JavaScript**
* **Objective-C**
* **PHP**
* **Python**
* **Ruby**
* **Rust**
* **Scala**
* **Swift**
* **TypeScript**

Актуальный и полный список поддерживаемых языков — в [документации Gitlab Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep)

### Ключевые возможности

* Анализ кода на уязвимости по правилам GitLab SAST
* Быстрый запуск без ручной настройки (“из коробки”)
* Поддержка мульти-языковых проектов
* Результаты в едином формате для отчётов и дашбордов TRAIO

### Как работает

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

```
registry.gitlab.com/gitlab-org/security-products/analyzers/semgrep:latest
```

При запуске выполняется команда:

```
/analyzer run
if [ ! -f "$REPORT_FILE_NAME" ]; then
  touch "$REPORT_FILE_NAME"
  echo "Created $REPORT_FILE_NAME manually."
fi
mv $REPORT_FILE_NAME /data
```

### Переменные окружения (env)

| Имя                | Значение по умолчанию        | Обязательное | Описание                      |
| ------------------ | ---------------------------- | ------------ | ----------------------------- |
| REPORT\_FILE\_NAME | gl-sast-report.json          | Нет          | Имя итогового отчёта          |
| SCAN\_TYPE         | GitLab Semgrep               | Нет          | Тип сканирования для парсинга |
| SEARCH\_MAX\_DEPTH | 20                           | Нет          | Глубина обхода директорий     |
| REPOSITORY         | (указывается автоматический) | Да           | Путь или URL к проекту        |

### Настройки и параметры

* **allow\_failure:** True — ошибки сканера не прерывают пайплайн
* **overwrite\_entrypoint:** True — позволяет явно задавать run\_command
* **timeout:** 10 минут (можно увеличить при необходимости)

### Кастомизация и расширенные настройки

* **Собственные rulesets:** можно указать свой набор правил через переменную `SEMGREP_RULES` (ссылка или путь к YAML/JSON)
* **Глубина и скорость:** регулируется через `SEARCH_MAX_DEPTH`, `.semgrepignore`, `SEMGREP_EXCLUDE`
* **Ограничение времени:** переменная `SEMGREP_TIMEOUT` (например, 600 секунд)
* **Дополнительные параметры:** через `SEMGREP_ADDITIONAL_ARGS` (например, `--strict`, `--max-target-bytes`)

Подробнее о кастомизации — [Customize rulesets (GitLab)](https://docs.gitlab.com/user/application_security/sast/customize_rulesets/) и [Semgrep Registry](https://semgrep.dev/explore).

### Ссылки и источники

* [Официальный docker-образ Semgrep Analyzer](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep)
* [Документация GitLab SAST](https://docs.gitlab.com/ee/user/application_security/sast/)

### Типовые сценарии использования

* Быстрый старт SAST-анализа для любого проекта (без ручной настройки)
* Проверка кода на соответствие стандартам безопасности и compliance

### Примечания

* Итоговый отчёт всегда сохраняется в /data и доступен для последующей обработки в TRAIO
