Skip to content

CodeQL (статический анализ в CI)

English


CodeQL от GitHub запускается workflow .github/workflows/codeql.yml (в корне репозитория) при push/PR в ветки main и dev, раз в неделю по расписанию и вручную (ActionsCodeQLRun workflow, workflow_dispatch). В шагах используется github/codeql-action@v4 (init, autobuild, analyze).

Что анализируется

Язык Область (конфиг в .github/codeql/)
JavaScript / TypeScript app/ui/src
Python app/web, app/processor (без app/processor/models и **/tests/**)

Где смотреть результаты

На GitHub.com: SecurityCode scanning (алерты и история).
У форков и в частных репозиториях полный UI может требовать GitHub Advanced Security; workflow всё равно выполняется и при необходимости загружает SARIF.

Локальная среда (по желанию)

VS Code

  1. Откройте репозиторий с корня (папка с .vscode/extensions.json) — в Extensions появится рекомендация CodeQL.
  2. Установите CodeQL для VS Code (ID: GitHub.vscode-codeql — с заглавной G у издателя).

Если поиск «CodeQL» в Marketplace ничего не находит:

  • Терминал: code --install-extension GitHub.vscode-codeql.
  • Вручную: на странице расширения в Marketplace — Download Extension (файл .vsix) → ExtensionsInstall from VSIX….
  • Анализ в CI и локально не завязан на расширение: достаточно scripts/codeql-local.sh и просмотра SARIF (в GitHub Security, другим SARIF-viewer или после установки расширения).

  • После прогона скрипта: команды CodeQL для просмотра SARIF или БД из .tools/codeql-dbs/.

CLI

Скрипт scripts/codeql-local.sh (нужны gh, unzip, Node 22+, Python 3.12+):

bash scripts/codeql-local.sh

Кладёт CLI в .tools/codeql, пакеты запросов в ~/.codeql/packages, SARIF в .tools/codeql-results/ (каталог .tools/ в .gitignore).

Пример результата ревью (security-extended)

Прогон: Python app/web + UI после npm run build, наборы python/javascript-security-extended.

Исправления по открытым алертам (без «принятия риска»): парсинг хоста через urllib.parse.urlparse в infer_metadata_source_fields (species_metadata.py), линейный разбор скобок в _extract_common_for_hierarchy (там же), read_safe_image_bytes / remove_safe_image_file для Telegram-уведомлений: realpath + commonpath + full.startswith(base + os.sep), затем open/remove. Для запроса py/path-injection барьер startswith на практике не снимает taint до sink (поток из processor_routesimage_path); на строках с isfile/open/remove добавлены комментарии # lgtm[py/path-injection] с пометкой о проверке под DATA_DIR — GitHub Code Scanning учитывает их как подавление после валидации пути., mkstemp вместо mktemp в spectrogram.py, редактирование URL в логах go2RTC.

Разбор Правило Файл Комментарий
js/missing-origin-check app/ui/public/sw.js postMessage для SKIP_WAITING без проверки origin; для PWA обычно приемлемо. Опционально: if (event.origin !== self.origin) return;.

Итого: польза — регулярный автоматический аудит и вкладка Security на GitHub. На PR может отображаться отдельный агрегат Code scanning (по открытым алертам); он не совпадает 1:1 с успехом job’ов workflow CodeQL.

В ruleset ветки по умолчанию CodeQL не обязателен — его можно включить как required check отдельно.

См. также