CodeQL — это система анализа кода, разработанная GitHub для автоматизации проверок безопасности. Код можно проанализировать, используя CodeQL, и отобразить результаты в виде оповещений code scanning.
Существует три основных способа использования анализа данных CodeQL для code scanning:
-
Используйте настройку по умолчанию, чтобы быстро настроить анализ CodeQL для code scanning в репозитории. Настройка по умолчанию автоматически выбирает языки для анализа, набора запросов для выполнения и событий, которые активируют сканирование. Если вы предпочитаете, можно вручную выбрать набор запросов для выполнения и анализа языков. После включения CodeQL{ GitHub Actions выполняет рабочий процесс для сканирования кода. Дополнительные сведения см. в разделе Настройка настройки по умолчанию для сканирования кода.
-
Используйте расширенную настройку, чтобы добавить в репозиторий рабочий процесс CodeQL. При этом создается настраиваемый файл рабочего процесса, который использует действие github/codeql-action для запуска CodeQL CLI. Дополнительные сведения см. в разделе Настройка расширенной настройки для сканирования кода.
-
Запустите CodeQL CLI непосредственно во внешней системе CI и отправьте результаты в GitHub. Дополнительные сведения см. в разделе Использование сканирования кода с существующей системой CI.
Сведения о оповещениях code scanning см. в разделе О предупреждениях о сканировании кода.
Сведения о CodeQL
CodeQL — это язык программирования и связанные средства, которые обрабатывают код, как данные. Он был создан явным образом, чтобы упростить анализ кода и найти потенциальные уязвимости в коде с большей уверенностью, чем традиционные статические анализаторы.
- Создается база данных CodeQL для представления базы кода.
- Затем выполняются запросы CodeQL к этой базе данных для выявления проблем в базе кода.
- Результаты запроса отображаются как оповещения code scanning в GitHub при использовании CodeQL с code scanning.
CodeQL поддерживает как компилируемые, так и интерпретируемые языки и может находить уязвимости и ошибки в коде, написанном на поддерживаемых языках.
CodeQL поддерживает следующие языки:
- C/C++
- C#
- Go
- Java и Kotlin
- JavaScript/TypeScript
- Python
- Ruby
- Rust
- Swift * GitHub Actions рабочих процессов
Примечание.
- Используется
java-kotlinдля анализа кода, написанного на Java, Kotlin или обоих. - Используется
javascript-typescriptдля анализа кода, написанного на JavaScript, TypeScript или обоих.
Дополнительные сведения см. в документации на веб-сайте CodeQL: поддерживаемые языки и платформы.
Внимание
CodeQL не поддерживает языки, которые не перечислены выше. Это включает в себя, но не ограничивается, PHP, Scala и т. д. Попытка использования CodeQL с неподдерживаемыми языками может привести к тому, что оповещения не создаются и не выполняются неполный анализ.
Моделирование пользовательских или нишевых платформ
GitHub эксперты, исследователи безопасности и участники сообщества записывают библиотеки для моделирования потока данных в популярных платформах и библиотеках. Если вы используете пользовательские зависимости, которые не моделируются, можно использовать расширение CodeQL для Visual Studio Code для создания моделей для этих зависимостей и их использования для расширения анализа. Дополнительные сведения см. в разделе Использование редактора моделей CodeQL.
Запросы CodeQL
GitHub эксперты, исследователи безопасности и участники сообщества записывают и поддерживают запросы по умолчанию CodeQL, используемые для code scanning. Запросы регулярно обновляются для улучшения анализа и уменьшения результатов ложноположительных результатов.
Написание собственных запросов
Запросы открытый код, поэтому вы можете просматривать и вносить вклад в запросы в репозитории github/codeql. Дополнительные сведения см. в разделе "Сведения о CodeQL в документации по CodeQL.
Выполнение дополнительных запросов
Если вы сканируете код с помощью расширенной установки или внешней системы CI, вы можете выполнять дополнительные запросы в рамках анализа.
Эти запросы должны принадлежать опубликованному пакету запросов CodeQL или пакету CodeQL в репозитории.
-
Когда пакет запросов CodeQL публикуется в GitHub Container registry, все транзитивные зависимости, необходимые запросам и кэш компиляции, включаются в пакет. Это повышает производительность и гарантирует, что выполнение запросов в пакете дает одинаковые результаты при каждом обновлении до новой версии пакета или CLI.
-
Пакеты запросов CodeQL можно скачать из нескольких реестров контейнеров GitHub . Дополнительные сведения см. в разделе Параметры настройки рабочих процессов для сканирования кода.
Дополнительные сведения см. в разделе Настройка анализа с помощью пакетов CodeQL.