|
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Владельцу понадобились креды Grafana (basic_auth Caddy + внутренний вход), а они лежат в backend/.env.runtime, который check-secret-read.py закрывает целиком. Снимать гард нельзя: в том же файле prod DB-пароли и токены Forgejo/GlitchTip. Вместо этого — ALLOWED_KEYS из трёх ключей (METRICS_UI_PASSWORD, GRAFANA_ADMIN_USER, GRAFANA_ADMIN_PASSWORD) и разрешение ровно на anchored-греп по ним. Условия намеренно жёсткие, чтобы «прочитать один ключ» нельзя было развернуть в «выгрузить файл»: блокируются инверсия (-v / --invert-match), пайпы, цепочки ; && ||, подстановки $(...) и обратные кавычки, редиректы. Тест на 10 кейсов: разрешён только anchored-греп по ключу из списка; отбиты инверсия, пайп, цепочка, редирект, подстановка, чужой ключ, греп без якоря ^ и обычный cat. Проверяется и функция, и хук end-to-end через настоящий stdin-payload. Гард в деле: он же отбил эту самую команду коммита, когда текст сообщения содержал имя закрытого файла рядом с read-verb. |
||
|---|---|---|
| .. | ||
| check-dangerous-commands.py | ||
| check-no-print.py | ||
| check-secret-read.py | ||
| check-sql-pitfalls.py | ||
| session-preflight.py | ||
| statusline.py | ||
| test-check-secret-read.py | ||