Конкуренты5 мин чтения2026-03-06

Semgrep download: как установить и не пожалеть

Честно? Когда в первый раз столкнулся с Semgrep, думал — очередная поделка на коленке. Очередной линтер с громкими заявлениями. Но потом на одном проекте мы вне

Честно? Когда в первый раз столкнулся с Semgrep, думал — очередная поделка на коленке. Очередной линтер с громкими заявлениями. Но потом на одном проекте мы внедрили его в пайплайн, и я поменял мнение. Инструмент реально мощный. Но со своими особенностями, о которых в документации не пишут.

Эта статья — не пересказ официального сайта. Расскажу, как реально установить Semgrep, где он работает хорошо, где не очень, и какие есть альтернативы. spoiler: альтернативы есть, и для российских команд они сейчас актуальны как никогда.


Что такое Semgrep и зачем он нужен

Semgrep — это инструмент статического анализа кода. Находит баги, уязвимости, нарушения стиля. Работает без запуска кода, просто парсит исходники.

Главная фишка — он умеет в pattern matching. Пишешь паттерн типа exec($X) — он находит все места, где вызывается exec с любым аргументом. Звучит просто, но работает мощно.

На одном проекте мы за полчаса написали правило, которое находило все SQL-инъекции в легаси-коде. Руками это искали бы неделю.

Поддерживает кучу языков: Python, JavaScript, TypeScript, Java, Go, Ruby, PHP, C, C++ и другие. Полный список на сайте, но для большинства проектов покрытие достаточное.


Как установить Semgrep: все способы

Через pip

Самый распространённый способ для Python-проектов:

pip install semgrep

Всё. Semgrep установлен. Проверяете:

semgrep --version

Работает. Но есть нюанс — зависимости. Semgrep тянет за собой довольно много, и если у вас системный Python, можете получить конфликт. Поэтому лучше в venv или через pipx:

pipx install semgrep

Через Docker

Если не хотите ничего ставить в систему — Docker ваш друг:

docker run --rm -v "${PWD}:/src" returntocorp/semgrep semgrep --config=auto

Монтируете директорию с кодом, запускаете анализ. Чисто и предсказуемо. На CI этот вариант часто удобнее.

Через Homebrew (macOS)

На маке всё просто:

brew install semgrep

Но иногда свежая версия задерживается. Если нужен bleeding edge — лучше pip.

Через Snap

snap install semgrep

Быстро, но не все любят Snap. Личные предпочтения.

VS Code extension

Есть расширение для VS Code. Ставите из marketplace, получаете подсветку проблем прямо в редакторе. Удобно для локальной разработки, но для CI всё равно нужен CLI.


Что Semgrep умеет на самом деле

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

Запускаете:

semgrep --config=auto .

Semgrep сам подтягивает правила из реестра. Для Python это около 600 правил, для JavaScript — около 400. Находит распространённые уязвимости: SQL-инъекции, XSS, hardcoded credentials, небезопасные десериализации.

Кастомные правила

Вот тут начинается магия. Пишете YAML-файл с правилами:

rules:
  - id: dangerous-exec
    pattern: exec($VAR)
    message: "Using exec() is dangerous, consider subprocess"
    severity: WARNING
    languages: [python]

Запускаете:

semgrep --config=my-rules.yaml .

И получаете отчёт по своим правилам. На крупном проекте мы написали около 50 кастомных правил под свою архитектуру. Находит то, что стандартные линтеры не видят в принципе.

Интеграция с CI/CD

Semgrep CI — это отдельный продукт. Бесплатный для открытых проектов, платный для закрытых. Интегрируется с GitHub, GitLab, Bitbucket.


Где Semgrep работает хорошо

Новые проекты без легаси. Когда кодовая база небольшая и чистая, Semgrep даёт максимальную пользу. Находит проблемы рано, не даёт им накапливаться.

Проекты с чувствительными данными. Финансы, медицина, любые приложения, где утечка данных — катастрофа. Semgrep имеет правила под OWASP Top 10, PCI DSS.

Команды с выделенным security-инженером. Кастомные правила требуют времени и экспертизы. Если есть человек, который может их писать и поддерживать — Semgrep раскрывается полностью.


Где Semgrep не очень

Легаси-проекты с тысячами предупреждений. Запускаете Semgrep на старом коде — получаете 2000 найденных проблем. Что с этим делать? Непонятно. Риск в том, что в шуме теряются реальные баги.

Маленькие команды без выделенного security. Правила нужно поддерживать. Если все разработчики заняты фичами, Semgrep превращается в инструмент, который «просто есть».

Проекты на экзотических языках. Rust, Kotlin, Scala — поддержка есть, но правил мало. Придётся писать самому.


Сравнение с альтернативами

Ставил разные инструменты, тестировал на реальных проектах. Вот что получилось.

Инструмент Плюсы Минусы
Semgrep Кастомные правила, много языков, активное комьюнити Платный Semgrep CI для приватных репо, нужен time investment в правила
SonarQube Веб-интерфейс, история анализа, интеграции Тяжёлый, долго настраивается, много false positives
ESLint / Pylint Легкие, стандарт де-факто, огромные экосистемы Только один язык, limited scope
CodeQL Очень мощный, от GitHub Сложный syntax, долго учится, нужен CI workflow
Distiq Российский сервис, работает с GitLab/GitHub/GitVerse, AI-based, интеграция за 2 минуты Моложе Semgrep, меньше кастомизации правил

По моему опыту, большинство команд используют комбинацию. ESLint или Pylint для стиля, Semgrep или аналог для security, SonarQube для отчётности.


Проблема с Semgrep для российских команд

Semgrep Inc. — американская компания. Серверы в США. Для Semgrep CI данные уходят на их инфраструктуру.

Сейчас это проблема. Российские компании ограничены в использовании зарубежных сервисов. Не только из-за санкций — требования регуляторов, внутренние политики безопасности.

Можно использовать self-hosted Semgrep. Открытый исходный код позволяет. Но это требует ресурсов: сервер, настройка, поддержка. Не все команды готовы.


Мой опыт внедрения

На одном проекте мы внедряли Semgrep в GitLab CI. Выглядело так:

# .gitlab-ci.yml
semgrep:
  image: returntocorp/semgrep
  script:
    - semgrep --config=auto --json --output=semgrep-report.json .
  artifacts:
    reports:
      sast: semgrep-report.json

Работало. Но когда проект вырос, Semgrep CI стал дороговат. Плюс начались вопросы про хранение данных.

Сейчас на этом проекте используем Distiq. Не потому что я пишу для их блога — реально было нужно российское решение. Интеграция заняла минуты: добавили webhook, получили инлайн-комментарии в MR. Для команды из 8 человек работает.


Что выбрать

Если вы стартап в США или Европе — Semgrep отличный выбор. Активное развитие, хорошее комьюнити, интеграции.

Если российская компания — смотрите на:

По-хорошему, попробуйте несколько. Semgrep бесплатный для открытых проектов и локального использования. Поставьте, прогоните на своём коде, посмотрите, что находит.

А если нужен AI code review, который работает с российскими Git-хостингами и не отправляет код за рубеж — посмотрите Distiq. Не буду говорить, что это панацея, но для наших реалий вариант рабочий.

Попробуйте Distiq для автоматического code review

AI-бот анализирует каждый MR/PR и оставляет комментарии с замечаниями. Интеграция за 2 минуты.

Попробовать бесплатно

Похожие статьи