Часто задаваемые вопросы о Codex Security CLI
Ответы на вопросы о сканированиях Codex Security, обнаруженных проблемах, ложных срабатываниях, покрытии, стоимости и CI.
Здесь собраны ответы на распространённые вопросы о сканировании репозиториев и управлении обнаруженными проблемами безопасности из терминала. Чтобы установить инструмент и выполнить первое сканирование, начните с краткого руководства по CLI.
Сканирование репозиториев
Почему после входа для сканирования используется API key
Если в вашей среде заданы OPENAI_API_KEY или CODEX_API_KEY, при сканированиях
без интерактивного терминала, а также при сканированиях с выводом в JSON и JSONL по умолчанию используется
API key из среды, даже после успешного входа через ChatGPT или токен доступа.
При интерактивном сканировании с текстовым выводом вам будет предложено выбрать способ, если
также доступен вход через ChatGPT. При пробном запуске учётные данные не запрашиваются и не загружаются.
Чтобы использовать сохранённые учётные данные для сканирования, выберите их явно:
npx @openai/codex-security scan . --auth chatgptЧтобы обязательно использовать API key из OPENAI_API_KEY или CODEX_API_KEY:
npx @openai/codex-security scan . --auth api-keyЧтобы сохранённые учётные данные автоматически использовались по умолчанию, выполните
unset OPENAI_API_KEY CODEX_API_KEY. Все поддерживаемые способы аутентификации описаны
в справочнике по CLI.
Можно ли возобновить прерванное массовое сканирование
Да. Выполните ту же команду bulk-scan с исходным CSV и каталогом вывода. Codex Security пропустит уже обработанные репозитории.
Добавьте --max-attempts 3, чтобы повторить попытку после временных ошибок репозитория или сканирования:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4 \
--max-attempts 3Результаты завершённых сканирований сохраняются, и такие сканирования не повторяются, даже если остаются пробелы
в охвате. Пробелы в охвате не приводят к завершению кампании с кодом 2.
Обнаруженные проблемы и покрытие
Где команды могут найти результаты предыдущих сканирований
Выведите список сохранённых сканирований репозитория:
npx @openai/codex-security scans list /path/to/repositoryИспользуйте ID сканирования из результатов, чтобы изучить обнаруженные проблемы:
npx @openai/codex-security scans show SCAN_IDДля каждого завершённого сканирования отчёт, обнаруженные проблемы, данные о покрытии и вспомогательные артефакты хранятся вместе. Полная структура описана в разделе Артефакты сканирования.
Чтобы просмотреть сохранённые события сканирования и рабочих процессов, выполните scans logs SCAN_ID. Эти журналы
не подвергаются редактированию и могут содержать исходный код или учётные данные.
Что делать, если CLI не может сохранить историю сканирований
Codex Security хранит историю сканирований в базе данных workbench. Если каталог состояния по умолчанию недоступен для записи, выберите закрытый каталог за пределами репозитория:
export CODEX_SECURITY_STATE_DIR=/path/outside/repository/codex-security-stateКак при сканировании различаются новые и уже известные проблемы
Выведите список открытых проблем из всех сканирований репозитория:
npx @openai/codex-security findings list /path/to/repositoryВ списке отмечаются проблемы, подтверждённые последним сканированием, а также ранее обнаруженные открытые проблемы, которые это сканирование не подтвердило.
Сравните обнаруженные проблемы в двух сканированиях:
npx @openai/codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_IDСравнение автоматически сопоставляет обнаруженные проблемы по первопричине, повторно использует сохранённые сопоставления и определяет новые, сохраняющиеся, повторно открытые, не обнаруженные, устранённые проблемы и проблемы с неопределённым статусом. Если последующее сканирование не находит ранее обнаруженную проблему в проверенном коде, она считается не обнаруженной. Она считается устранённой только после явного закрытия с указанием, что она уже исправлена. Для исключённых путей и неоднозначных сопоставлений статус остаётся неопределённым.
Как работает обратная связь о ложных срабатываниях
Изучите сохранённое сканирование, чтобы найти ID случая:
npx @openai/codex-security scans show SCAN_IDУкажите, почему эта проблема неприменима:
npx @openai/codex-security findings false-positive FINDING_OCCURRENCE_ID \
--reason "The framework escapes this input before it reaches the query"При последующих сканированиях того же репозитория это объяснение используется как контекст. При этом текущий исходный код, средства контроля и достижимость по-прежнему проверяются независимо. Отклонение не отключает правило, путь или класс уязвимостей.
Подробное описание команды см. в справочнике по обнаруженным проблемам.
Почему повторные сканирования могут обнаруживать разные проблемы
Результаты сканирований с применением ИИ могут различаться даже при одинаковой конфигурации. Сначала повторно выполните базовое сканирование:
npx @openai/codex-security scans rerun BASELINE_SCAN_IDПри повторном запуске сохраняется исходная конфигурация сканирования и требуется та же версия плагина. Если версия установленного плагина изменилась, команда завершит работу.
Сравните базовое сканирование с новым:
npx @openai/codex-security scans compare BASELINE_SCAN_ID REPEAT_SCAN_IDПредоставьте общую архитектурную документацию и рекомендации по безопасности, если причиной различий может быть недостаток контекста. Сопоставление позволяет выявить одну и ту же базовую проблему в разных запусках, но не делает результаты сканирования детерминированными. Любую важную исчезнувшую проблему следует повторно проверить напрямую.
Как команде убедиться, что исправление сработало
Повторно проверьте исходную проблему в изменённой рабочей копии. Из этой рабочей копии передайте отчёт о ней и описание проблемы, исправление которой вы хотите проверить:
npx @openai/codex-security validate /path/to/original/findings.json \
"Recheck the SQL injection in src/orders.ts:42 against the current code"Изучите доказательства того, что уязвимый путь выполнения закрыт, а штатное поведение сохранилось. Запустите исходный сценарий воспроизведения или регрессионный тест, если они доступны. Если проверку выполнить нельзя, укажите в результате оставшуюся неопределённость.
Сравнение сканирований может показать, как изменились обнаруженные проблемы, но само по себе отсутствие проблемы не подтверждает исправление.
Что означает неполное покрытие
Изучите coverage.json: в нём указаны исключённые пути, области с отложенной проверкой и открытые вопросы.
Новые результаты не содержат поля полноты охвата. Проверьте scan.status в
scan-manifest.json, чтобы узнать статус выполнения.
Пробелы в охвате не меняют код завершения выполненного сканирования. Код завершения 0 не означает,
что проверен каждый файл. Последующее сканирование не может установить, что ранее обнаруженная проблема
больше не существует, если оно не охватывает путь, где эта проблема была обнаружена.
Автоматизация и стоимость
Как работают ограничения времени для глубокого сканирования
При запуске глубокого сканирования задайте предельное время работы исполнителя:
npx @openai/codex-security scan . --mode deep --max-time-hours 1.5Значение по умолчанию — 96 ч. Допускается любое положительное значение до 96, включая
дробные. По истечении срока Codex Security останавливает незавершённые рабочие процессы, сохраняет
результаты завершённых стандартных сканирований и объединяет их в итоговый отчёт.
Проверьте в отчёте, какие области были проверены и какая работа отложена. Само по себе истечение срока
не определяет код завершения: его определяют статус выполнения и политика уровней серьёзности.
Для постоянных настроек или кампаний массового сканирования задайте max_time_hours в разделе
[deep_scan] конфигурации глубокого
сканирования.
Как работают ограничения стоимости сканирования
Перед запуском сканирования задайте ограничение предполагаемой стоимости в USD:
npx @openai/codex-security scan . --max-cost 5Лимит основан на оценке и не является жёстким пределом расходов. Уже выполняющиеся
запросы могут завершиться с его превышением. Если глубокое сканирование достигает лимита после того, как Codex
Security объединит результаты завершённых рабочих процессов, CLI может сохранить завершённый
отчёт с предупреждением о бюджете. Он возвращает 0 или 1, если обнаруженные проблемы достигают
заданного порога серьёзности. Если сформировать корректный завершённый результат не удаётся,
он возвращает 2 и сохраняет все доступные выходные данные.
Для проверок пул-реквестов GitHub и сканирования репозитория по расписанию используйте
Codex Security GitHub Action. В версии
action-v0.3.0 завершённое сканирование означает, что настроенный анализ дал
допустимый результат. Исключения из области сканирования и отложенные исследования не позволяют обойти
политику уровней серьёзности. Изучите coverage.json, чтобы оценить охват сканирования и
его ограничения. Чтобы также отклонять пустые наборы изменений и пробные запуски, требуйте, чтобы выходное значение
scan-status у Action было равно completed; см. Выбор политики
уровней серьёзности.
Для других провайдеров см. обзор CI/CD.
Для проверки перед каждым коммитом используйте
install-hook.