Молниеносный статический анализатор кода с человекочитаемым синтаксисом правил (похож на сам код, а не на regex): находит реальные уязвимости и антипаттерны в десятках языков за секунды на кодовых базах любого размера. Используется огромным количеством компаний для проверки кода на лету, до продакшна.
pip install semgrep semgrep --config auto /path/to/code semgrep --config "p/security-audit" .
Semgrep — это быстрый инструмент статического анализа с открытым исходным кодом, который ищет в коде, находит ошибки и обеспечивает соблюдение безопасных стандартов и стандартов кодирования. Semgrep поддерживает более 30 языков программирования и может работать в IDE, в качестве проверки перед коммитом и как часть пайплайнов CI/CD.
Semgrep — это семантический grep для кода. Если запустить grep "2", будут найдены только точные совпадения со строкой 2, тогда как Semgrep найдёт совпадение в x = 1; y = x + 1 при поиске 2. Правила Semgrep выглядят как код, который вы уже пишете; никаких абстрактных синтаксических деревьев, возни с регулярными выражениями или болезненных ДСЯ (DSL).
Обратите внимание, что в контексте безопасности Community Edition Semgrep будет пропускать многие истинно положительные результаты, поскольку он может анализировать код только в пределах одной функции или одного файла. Если вы хотите использовать Semgrep в целях безопасности (SAST, SCA или сканирование секретов), настоятельно рекомендуется платформа Semgrep AppSec, поскольку она добавляет следующие критически важные возможности:
Платформа Semgrep AppSec работает из коробки с 20 000+ проприетарными правилами в области SAST, SCA и сканирования секретов. Профессиональные правила написаны и поддерживаются командой безопасности Semgrep и отличаются высокой точностью, что означает, что команды AppSec могут уверенно передавать находки напрямую разработчикам, не замедляя их.
Semgrep анализирует код локально на вашем компьютере или в вашей среде сборки: по умолчанию код никогда не загружается. Начните использовать →.
Semgrep Code поддерживает более 30 языков, включая:
Apex · Bash · C · C++ · C# · Clojure · Dart · Dockerfile · Elixir · HTML · Go · Java · JavaScript · JSX · JSON · Julia · Jsonnet · Kotlin · Lisp · Lua · OCaml · PHP · Python · R · Ruby · Rust · Scala · Scheme · Solidity · Swift · Terraform · TypeScript · TSX · YAML · XML · Generic (ERB, Jinja и др.)
Semgrep Supply Chain поддерживает 12 языков в рамках 15 менеджеров пакетов, включая:
C# (NuGet) · Dart (Pub) · Go (Go модули, go mod) · Java (Gradle, Maven) · Javascript/Typescript (npm, Yarn, Yarn 2, Yarn 3, pnpm) · Kotlin (Gradle, Maven) · PHP (Composer) · Python (pip, pip-tool, Pipenv, Poetry) · Ruby (RubyGems) · Rust (Cargo) · Scala (Maven) · Swift (SwiftPM)
Дополнительные сведения см. в разделе Поддерживаемые языки.
Для новых пользователей мы рекомендуем начинать с платформы Semgrep AppSec, поскольку она предоставляет визуальный интерфейс, демо-проект, рабочие процессы сортировки и исследования результатов и обеспечивает быструю настройку в CI/CD. Сканирование по-прежнему выполняется локально, и код не загружается. Как альтернатива, вы также можете начать с CLI и работать с выводом в терминале для выполнения разовых поисковых запросов.
Зарегистрируйтесь на semgrep.dev
Ознакомьтесь с демонстрационными находками, чтобы понять, как работает Semgrep
Отсканируйте свой проект, перейдя в Projects > Scan New Project > Run scan in CI
Выберите свою систему контроля версий и выполните шаги по настройке для добавления вашего проекта. После этой настройки Semgrep будет сканировать ваш проект после каждого pull request.
[Необязательно] Если вы хотите запустить Semgrep локально, следуйте инструкциям в разделе CLI.
Если возникнут какие-либо проблемы, обратитесь за помощью в Slack Semgrep.
Установите Semgrep CLI
```
$ brew install semgrep
$ python3 -m pip install semgrep
$ docker run -it -v "${PWD}:/src" semgrep/semgrep semgrep login $ docker run -e SEMGREP_APP_TOKEN= --rm -v "${PWD}:/src" semgrep/semgrep semgrep ci ```
Выполните semgrep login, чтобы создать учётную запись и войти в Semgrep. Этот шаг необязателен, но вход в Semgrep даёт вам доступ к:
Перейдите в корневую директорию вашего приложения и выполните semgrep ci. Это сканирует ваш проект на наличие уязвимостей в исходном коде и его зависимостях.
Попробуйте написать собственный запрос интерактивно с помощью флага -e. Например, проверка для Python, где левая и правая части оператора == совпадают (потенциально ошибка):
$ semgrep -e '$X == $X' --lang=py path/to/src
Экосистема Semgrep включает в себя следующие компоненты:
Платформа Semgrep AppSec - Простое управление и масштабирование SAST, SCA и сканирования секретов в рамках организации без риска перегрузить разработчиков. Настраивайте, какие результаты видят разработчики, где они их видят, и интегрируйтесь с поставщиками CI, такими как GitHub, GitLab, CircleCI и другие. Включает бесплатные и платные тарифы.
Semgrep Code (SAST) - Достигайте реального прогресса в работе с бэклогом уязвимостей с помощью SAST, который минимизирует шум и позволяет разработчикам быстро устранять проблемы самостоятельно, даже если у них нет знаний по безопасности. Простая настройка безопасных направляющих и индивидуальные, пошаговые руководства по исправлению означают, что разработчики действительно устраняют проблемы, так как не чувствуют замедления.
Semgrep Supply Chain (SSC) - Сканер зависимостей с высокой сигнальностью, который обнаруживает достижимые уязвимости в сторонних библиотеках и функциях с открытым исходным кодом.
Semgrep Secrets (Сканирование секретов) - Обнаружение секретов, использующее семантический анализ, улучшенный анализ энтропии и валидацию для точного выявления конфиденциальных учетных данных в рабочем процессе разработчиков.
Semgrep Assistant (AI) - Assistant — это инженер по Application Security на базе ИИ, который помогает как разработчикам, так и командам AppSec приоритизировать, классифицировать и исправлять результаты Semgrep в масштабе. Люди соглашаются с решениями Assistant по автоматической классификации в 97% случаев и оценивают сгенерированные руководства по исправлению как полезные в 80% случаев. Чтобы узнать, как работает Assistant, прочитайте это описание.
MCP-сервер Semgrep - Сервер Протокола Контекста Моделей (MCP), который позволяет ИИ-ассистентам для кодирования запускать сканирования Semgrep напрямую. Интегрируется с Cursor, VS Code, Windsurf, Claude Desktop и другими. Запустите semgrep mcp, чтобы запустить его локально.
Хуки - Автоматически запускают сканирования Semgrep при написании кода.
write_custom_semgrep_rule, помогают ИИ-ассистентам писать точные правила Semgrep./plugin marketplace add semgrep/mcp-marketplaceДополнительные ресурсы:
Присоединяйтесь к сотням тысяч других разработчиков и инженеров по безопасности, уже использующих Semgrep в таких компаниях, как GitLab, Dropbox, Slack, Figma, Shopify, HashiCorp, Snowflake и Trail of Bits.
Semgrep разрабатывается и коммерчески поддерживается компанией Semgrep, Inc., компанией в области безопасности программного обеспечения.
Правила Semgrep выглядят как код, который вы уже пишете; никаких абстрактных синтаксических деревьев, мучений с регулярными выражениями или болезненных DSL. Вот быстрое правило для поиска операторов print() в Python.
Запустите его онлайн в Semgrep Playground, нажав здесь.
<a href="https://semgrep.dev/playground/r/3qUzQD/ievans.print-to-logger" target="_blank"><img src="https://raw.githubusercontent.com/semgrep/semgrep/develop/images/semgrep-example-rules-editor.jpg" width="582" alt="Пример правила Semgrep для поиска операторов print() в Python" /></a>
Посетите Docs > Примеры правил для вариантов использования и идей.
| Вариант использования | Правило Semgrep |
|---|---|
| Запрет опасных API | Запретить использование exec |
| Поиск маршрутов и аутентификации | Извлечь маршруты Spring |
| Принудительное использование безопасных настроек по умолчанию | Безопасная установка cookies Flask |
| Потоки зараженных данных в точки приема (sinks) | Поток данных ExpressJS в sandbox.run |
| Принудительное соблюдение лучших практик проекта | Использовать assertEqual для проверок на ==, Всегда проверять вызовы subprocess |
| Закрепление специфических для проекта знаний | Проверять транзакции перед их выполнением |
| Аудит опасных мест безопасности | Обнаружение XSS в Apache Airflow, Захардкоженные учетные данные |
| Аудит файлов конфигурации | Поиск использований ARN в S3 |
| --- |
| Переход с устаревших API | DES устарел, Устаревшие API Flask, Устаревшие API Bokeh | | Применение автоматических исправлений | Использование listenAndServeTLS |
Посетите раздел Документация > Расширения, чтобы узнать об использовании Semgrep в вашем редакторе или pre-commit. При интеграции в CI и настройке для сканирования pull requests, Semgrep будет сообщать только о проблемах, внесенных этим pull request; это позволяет начать использовать Semgrep без необходимости исправлять или игнорировать ранее существовавшие проблемы!
Просмотрите полную документацию Semgrep на сайте. Если вы новичок в Semgrep, ознакомьтесь с разделом Документация > Начало работы или интерактивным учебником.
Использование удаленной конфигурации из Реестра (например, --config=p/ci) отправляет псевдонимизированные метрики правил на semgrep.dev.
При использовании конфигураций из локальных файлов (например, --config=xyz.yml) метрики отправляются только при входе пользователя в систему.
Чтобы отключить метрики правил Реестра, используйте --metrics=off.
Политика конфендициальности Semgrep описывает принципы, направляющие решения о сборе данных, и детализацию собираемых и несобираемых данных, когда метрики включены.
Для обновления выполните команду, соответствующую способу установки Semgrep:
# Using Homebrew
$ brew upgrade semgrep
# Using pipx
$ pipx upgrade semgrep
# Using uv tool command
$ uv tool upgrade semgrep
# Using Docker
$ docker pull semgrep/semgrep:latest