Skip to main content

О проверке кода с помощью CodeQL

Для выявления уязвимостей и ошибок в коде вы можете использовать CodeQL. Результаты отображаются как оповещения code scanning в GitHub.

Кто может использовать эту функцию?

Code scanning доступен для следующих типов репозитория:

  • Общедоступные репозитории для GitHub.com
  • Репозитории, принадлежащие организации, на GitHub Team, GitHub Enterprise Cloud или GitHub Enterprise Server, с включённым GitHub Code Security .

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 — это язык программирования и связанные средства, которые обрабатывают код, как данные. Он был создан явным образом, чтобы упростить анализ кода и найти потенциальные уязвимости в коде с большей уверенностью, чем традиционные статические анализаторы.

  1. Создается база данных CodeQL для представления базы кода.
  2. Затем выполняются запросы CodeQL к этой базе данных для выявления проблем в базе кода.
  3. Результаты запроса отображаются как оповещения 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.