Добро пожаловать в учебник по сканированию кода! Этот урок проведет вас через то, как настроить Github Advanced Security: сканирование кода, а также интерпретировать результаты, которые он может найти. Следующий репозиторий содержит уязвимость инъекции SQL для демонстрационной цели.
Сканирование кода - это функция, которую вы используете для анализа кода в репозитории GitHub, чтобы найти уязвимости безопасности и ошибки кодирования. Любые проблемы, выявленные анализом, показаны в GitHub.
Вы можете использовать сканирование кода с помощью CodeQL, двигателя анализа семантического кода. CodeQL рассматривает код как данные, позволяя вам найти потенциальную уязвимость в вашем коде с большей уверенностью, чем традиционные статические анализаторы.
Этот урок с использованием анализа CodeQL с сканированием кода для поиска уязвимостей в вашем коде.
Начните с создания нового хранилища из вилки (публичной) или клонирования репозитория.

Где создание раздвоенного репозитория, убедитесь, что
Нажмите на вкладку Security .

Нажмите Set up code scanning .

Нажмите кнопку Setup this workflow по анализу CodeQL.

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

Нажмите Start Commit -> Commit this file , чтобы совершить изменения в основном филиале.
Есть ряд событий, которые могут вызвать рабочий процесс действий GitHub. В этом примере рабочий процесс будет вызван

Настройка нового рабочего процесса CodeQL и его совершение в основной филиале на шаге выше запустит сканирование.
Нажмите вкладку Actions -> CodeQL
Нажмите на конкретный запуск рабочего процесса. Вы можете просмотреть прогресс рабочего процесса, пока анализ не завершится.

Как только рабочий процесс завершится, нажмите на вкладку Security -> Code Scanning Alerts . Должно быть видно предупреждение о безопасности «запрос, созданный из контролируемых пользователем источников».
Нажатие на оповещение о безопасности предоставит подробную информацию о предупреждении о безопасности, включая:

Нажмите Show more , чтобы просмотреть полное описание предупреждения, включая примеры и ссылки на дополнительную информацию.


Анализ CodeQL способен проследить путь потока данных от источника к раковине и дает вам возможность просматривать прохождение пути в пределах оповещения.
Нажмите show paths , чтобы увидеть путь потока данных, который привел к этому предупреждению.


Чтобы исправить это конкретное предупреждение, нам необходимо убедиться, что параметры, используемые в запросе SQL, подтверждены и дезинфицированы.
Нажмите на вкладку Code и отредактируйте файл IndexController.java в папке Controllers , замените содержимое на File fixme .

Нажмите Create a new branch for this commit and start a pull request , назовите филиал fix-sql-injection и создайте запрос на вытягивание.
В запросе вытягивания вы заметите, что анализ CodeQL начался как проверка состояния. Подождите, пока он не завершится.

После завершения рабочего процесса нажмите на Details с помощью Code Scanning Results / CodeQL .

Обратите внимание, что сканирование кода обнаружило, что этот запрос на притяжение исправят уязвимость в инъекции SQL, которая была обнаружена ранее.

Объедините запрос на тягу. После того, как запрос на притяжение будет объединен, другой рабочий процесс начнется для сканирования репозитория на предмет любых уязвимостей.
После завершения окончательного рабочего процесса перейдите обратно на вкладку Security и нажмите Closed . Обратите внимание, что запрос, созданный из контролируемого пользователем источников, теперь появляется закрытая проблема.

Нажмите на предупреждение о безопасности и заметьте, что оно подробно описывает, когда было исправлено исправление, кем и конкретный коммит. Это обеспечивает полную прослеживаемость, чтобы детализировать, когда и как было исправлено оповещение о безопасности и именно то, что было изменено, чтобы исправить проблему.

Теперь, когда у нас есть анализ CodeQL и исправить предупреждение о безопасности, мы можем попытаться ввести предупреждение в запрос на вытяжение.
Создайте новый запрос на притяжение с базовой ветвью в качестве main ветви и сравнения ветви в качестве new-feature филиала.

Убедитесь, что базовая ветвь установлена на вашу собственную репозиторию main ветви в сравнении с main ветвей исходного хранилища.
После того, как запрос на притяжение будет создан, вы заметите, что анализ CodeQL начался как проверка состояния. Подождите, пока он не завершится.
После завершения рабочего процесса Code Scanning Results / CodeQL не удалось. Обратите внимание, что сканирование кода обнаружило, что этот запрос на привлечение вводит новое предупреждение о безопасности.

Непосредственно в запросе вытягивания вы заметите, что бот сканирования кода GitHub оставил рассмотрение запроса на вытяжение с подробной информацией о безопасности. Это поможет разработчикам быстро выявить проблемы безопасности, введенные в их запросах на притяжение.

Это также позволяет сотрудничеству между разработчиками и группами безопасности обсуждать оповещение о безопасности и как его исправить.

Нажмите « Show more details с новым Code Scanning Alert чтобы перейти на вкладку Security и просмотреть подробности предупреждения о безопасности.

Обратите внимание, что оповещение о безопасности было найдено In pull request , а не в main филиале (производство).
Готовы поговорить о расширенных функциях безопасности для GitHub Enterprise? Свяжитесь с продажами для получения дополнительной информации!
Проверьте страницу функции безопасности GitHub для получения дополнительных функций безопасности, встроенных в GitHub.
Ознакомьтесь с документацией по сканированию кода для дополнительных параметров конфигурации и технических данных.