Что такое проверка кода?
Функция проверки кода использует CodeQL для анализа кода в репозитории GitHub, чтобы найти уязвимости системы безопасности и ошибки в коде. Проверка кода доступна для всех общедоступных репозиториев и для частных репозиториев, принадлежащих организациям, для которых включена расширенная безопасность GitHub. Если при проверке кода обнаружена потенциальная уязвимость или ошибка в коде, GitHub отображает в репозитории оповещение на вкладке "Безопасность". После исправления кода, вызвавшего оповещение, GitHub закрывает это оповещение.
Вы можете использовать сканирование кода для поиска, рассмотрения и приоритизации существующих проблем в коде. Сканирование кода также препятствует внесению новых проблем разработчиками. Вы можете запланировать проверку на определенные дни и время или активировать проверку при наступлении в репозитории определенного события, например принудительной отправки.
В этом уроке вы узнаете о CodeQL, трех вариантах настройки сканирования кода и добавлении рабочего процесса CodeQL в репозиторий.
О проверке кода с помощью CodeQL
CodeQL — это подсистема анализа кода GitHub, разработанная для автоматизации проверок безопасности. Вы можете анализировать код с помощью CodeQL и отображать результаты в виде оповещений проверки кода. Существует три основных способа настройки анализа CodeQL для сканирования кода:
- Используйте настройку по умолчанию, чтобы быстро настроить анализ CodeQL для сканирования кода в репозитории. Настройка по умолчанию обрабатывает выбор языков для анализа, набора запросов для выполнения и событий, которые активируют сканирование с помощью параметра вручную настроить языки и наборы запросов. Этот параметр установки запускает сканирование кода в виде действия GitHub.
- Используйте расширенную настройку, чтобы добавить рабочий процесс CodeQL непосредственно в репозиторий. Добавление рабочего процесса CodeQL непосредственно в репозиторий создает настраиваемый файл рабочего процесса, который использует действие github/codeql-action для запуска CLI CodeQL в качестве GitHub Action.
- Запуск CodeQL CLI непосредственно во внешней системе CI и отправка результатов в GitHub.
CodeQL интерпретирует код как данные, что позволяет находить потенциальные уязвимости в коде с большей уверенностью, чем при использовании традиционных статических анализаторов. Вы создаете базу данных CodeQL для представления базы кода, а затем выполняете запросы CodeQL в этой базе данных, чтобы определить проблемы в базе кода. При использовании CodeQL для проверки кода результаты запроса отображаются в виде оповещений о проверке кода в GitHub.
CodeQL поддерживает как скомпилированные, так и интерпретированные языки, и он может находить уязвимости и ошибки в коде, написанном на следующих поддерживаемых языках:
- C или C++
- C#
- Иди
- Java и Kotlin
- JavaScript/TypeScript
- Питон
- Руби
- Свифт
В следующем разделе объясняется, как добавить рабочий процесс CodeQL в репозиторий. Вы узнаете, как настроить CodeQL с помощью внешних инструментов в разделе «Включить сканирование кода с помощью сторонних средств».
Включение CodeQL в репозитории с помощью программы установки по умолчанию
Если у вас есть разрешения на запись в репозиторий, можно настроить проверку кода для этого репозитория.
Выполните следующие действия, чтобы настроить проверку кода с помощью рабочего процесса GitHub Actions для CodeQL:
На GitHub.com перейдите на главную страницу репозитория.
В поле имени репозитория выберите "Безопасность".
Выберите "Настройка сканирования кода". Если этот параметр недоступен, попросите администратора владелец организации или репозитория включить расширенную безопасность GitHub.
В раскрывающемся списке "Настройка" выберите "По умолчанию".
Просмотрите параметры по умолчанию. При необходимости нажмите кнопку "Изменить " в левом нижнем углу нового окна, чтобы настроить запуск CodeQL.
on:pull_requestТриггерыon:pushпо умолчанию для сканирования кода полезны для разных целей. Дополнительные сведения об этих триггерах см. в модуле настройки сканирования кода .Нажмите кнопку "Включить CodeQL ", когда вы будете готовы включить сканирование кода.
В рабочем процессе анализа CodeQL по умолчанию сканирование кода настраивается для анализа кода каждый раз, когда вы отправляете изменения в любые защищенная ветвь или создаете запрос на вытягивание в ветвь по умолчанию. После отправки код выполняется автоматически.
В предыдущем разделе мы включили сканирование кода с помощью настройки по умолчанию, которая выполняет сканирование кода как действие GitHub без необходимости поддерживать файл рабочего процесса. Другим вариантом является расширенная настройка, которая создает файл рабочего процесса по умолчанию, который можно изменить для расширенной настройки и дополнительных шагов. Мы рассмотрим расширенную настройку для настройки сканирования кода в более поздних уроках.
Выполнение сканирования кода с помощью GitHub Actions влияет на ежемесячные минуты выставления счетов. Если вы хотите использовать GitHub Actions за пределами хранилища или минут, включенных в свою учетную запись, вы будете выставлены счета за большее использование.
Сведения о выставлении счетов за Actions
Сканирование кода использует GitHub Actions, и каждый запуск рабочего процесса сканирования кода использует минуты для GitHub Actions. GitHub Actions предоставляются бесплатно как для общедоступных репозиториев, так и для самостоятельно размещенных средств выполнения. Для частных репозиториев каждая учетная запись GitHub получает определенное количество бесплатных минут и место в хранилище в зависимости от продукта, который применяется для этой учетной записи. Ограничения расходов контролируют любое использование за пределами включенных сумм. Если вы являетесь клиентом с ежемесячным счетом, ваша учетная запись имеет ограничение расходов по умолчанию в нулевых долларах США (USD), что предотвращает дополнительное использование минут или хранилища для частных репозиториев за пределами сумм, включенных в вашу учетную запись. Если вы оплачиваете учетную запись по счету, предельная сумма расходов по умолчанию для вашей учетной записи будет неограниченной. Минуты сбрасываются каждый месяц, а использование хранилища не выполняется.