fix(tradein): маскировать секрет и в параметрах с префиксом (#3154)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 12s
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 / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m38s
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 12s
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 / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m38s
Ревью-minor: якорь [?&] вплотную к имени пропускал client_secret=, refresh_token=, auth_token=, webhook_secret=. Разрешаем префикс [\w.-]* перед альтернацией — маскируем имена, ОКАНЧИВАЮЩИЕСЯ на чувствительное слово. Кейс not_a_secret_name заменён на честные отрицательные: ?secretary= и ?tokens_page= (не оканчиваются на secret/token) плюс /api/v1/token-info в пути. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
ed94a03f73
commit
55a67e5c45
2 changed files with 15 additions and 4 deletions
|
|
@ -20,10 +20,12 @@ from __future__ import annotations
|
|||
import logging
|
||||
import re
|
||||
|
||||
# Имена параметров, значение которых маскируем. Значение — до следующего `&`,
|
||||
# пробела или кавычки (access-строка uvicorn обрамляет запрос кавычками).
|
||||
# Имена параметров, значение которых маскируем: имя ОКАНЧИВАЕТСЯ на чувствительное
|
||||
# слово, поэтому перед альтернацией допускаем префикс (`client_secret`,
|
||||
# `refresh_token`, `webhook_secret`). Значение — до следующего `&`, пробела или
|
||||
# кавычки (access-строка uvicorn обрамляет запрос кавычками).
|
||||
_SENSITIVE_QUERY = re.compile(
|
||||
r"([?&](?:secret|token|api[-_]?key|apikey|access[-_]?token|password|signature|sig)=)"
|
||||
r"([?&][\w.-]*(?:secret|token|api[-_]?key|apikey|access[-_]?token|password|signature|sig)=)"
|
||||
r"[^&\s\"'<>]+",
|
||||
re.IGNORECASE,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -91,6 +91,11 @@ def test_app_logger_via_root_handler_masks_secret() -> None:
|
|||
f"/hook?api_key={_SECRET}",
|
||||
f"/hook?apiKey={_SECRET}",
|
||||
f'"GET /hook?access_token={_SECRET} HTTP/1.1"',
|
||||
# Имя с префиксом: чувствительное слово в КОНЦЕ имени параметра.
|
||||
f"/hook?client_secret={_SECRET}",
|
||||
f"/hook?webhook_secret={_SECRET}",
|
||||
f"/hook?refresh_token={_SECRET}",
|
||||
f"/hook?auth_token={_SECRET}",
|
||||
],
|
||||
)
|
||||
def test_sensitive_param_names_are_masked(raw: str) -> None:
|
||||
|
|
@ -104,7 +109,11 @@ def test_sensitive_param_names_are_masked(raw: str) -> None:
|
|||
[
|
||||
"GET /api/v1/trade-in/offers?limit=50&city=Екатеринбург",
|
||||
"https://metrics.gendsgn.ru/ingest/loki/api/v1/push",
|
||||
"/hook?not_a_secret_name=value",
|
||||
# Имя НЕ оканчивается на чувствительное слово — маскировать нечего.
|
||||
"/hook?secretary=anna",
|
||||
"/hook?tokens_page=2",
|
||||
# `token-info` в ПУТИ, а не в query: значения там нет вовсе.
|
||||
"GET /api/v1/token-info?limit=5",
|
||||
],
|
||||
)
|
||||
def test_innocent_lines_untouched(raw: str) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue