В прошлом году GitHub выпустил фичу сканирования кода, которая позволяет разработчикам добавлять проверки безопасности в свою среду CI/CD и в целом в рабочую среду. В этом посте демонстрируются основы использования CodeQL, механизма анализа, лежащего в основе сканирования кода, в связке с GitHub Actions.

Что такое CodeQL?

CodeQL - это механизм анализа, который автоматизирует проверки безопасности путем выполнения запросов к базе данных, созданной на основе вашей кодовой базы. Эта база данных CodeQL создается в процессе сборки и представляет исходный код в реляционной форме. По умолчанию сканирование кода запускает стандартные запросы CodeQL, написанные исследователями GitHub и сообществом, но вы также можете создавать свои собственные запросы.

В набор по умолчанию входят такие запросы, как “Pointer overflow check”, “Potentially overflowing call to snprintf”, “Uncontrolled format string”, и другие.

Настройка CodeQL с GitHub Actions

Сканирование кода с помощью CodeQL бесплатно для публичных репозиториев и является частью GitHub Advanced Security для GitHub Enterprise. Вот инструкции по быстрой установке в 4 клика. В качестве альтернативы я добавил гифку с приведенными ниже инструкциями:

Вы можете просмотреть выходные данные сканирования на вкладке "Actions", и вы можете просматривать и управлять любыми предупреждениями сканирования кода на вкладке "Security".

Baselining

Иногда, особенно для больших legacy-кодовых баз, количество предупреждений может быть огромным. По этой причине CodeQL показывает только новые/исправленные предупреждения в pull request-ах. Если вы хотите управлять существующими предупреждениями, вы можете сделать это в разделе «Code scanning alerts» на вкладке «Security».

Важно понимать разницу между Dismiss и Delete. Одно из ключевых различий заключается в том, что при отклонении (Dismissing) предупреждения тот же код не создает его повторно. При удалении (Deleting) предупреждения тот же код сгенерирует такое же предупреждение при следующем сканировании. В случае, если вы хотите массово отклонять предупреждения, вы можете сделать это из сводки предупреждений (после фильтрации списка по любому набору предупреждений, который вы хотите отклонить).

Комментарии (1)


  1. Tujh
    08.07.2021 13:58

    А есть сравнение с уже существующими сервисами, например codacy?