refactor(webhook): 抽离敏感请求头配置到公共模块
将硬编码的敏感请求头集合替换为公共crypto模块的常量,统一维护敏感头配置,避免重复定义
This commit is contained in:
parent
1bf28f4ed6
commit
0993a721b6
@ -47,23 +47,12 @@ from yuxi.external_systems.use_cases.dto.webhook import (
|
||||
VerifySignatureInput,
|
||||
)
|
||||
from yuxi.storage.postgres.models_business import User
|
||||
from yuxi.utils.crypto import SENSITIVE_HTTP_HEADERS
|
||||
|
||||
from server.utils.auth_middleware import get_admin_user, get_db, get_required_user
|
||||
|
||||
webhook_router = APIRouter(prefix="/webhooks", tags=["external-systems-webhook"])
|
||||
|
||||
# 敏感请求头白名单:``POST /events`` 透传 headers 到 WebhookEvent 持久化前必须剔除,
|
||||
# 对齐 ``ExternalWebhookEvent`` ORM 注释"payload/headers 由调用方在写入前完成脱敏"。
|
||||
_SENSITIVE_HEADERS = frozenset(
|
||||
{
|
||||
"authorization",
|
||||
"cookie",
|
||||
"set-cookie",
|
||||
"x-api-key",
|
||||
"x-auth-token",
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def _extract_client_ip(request: Request) -> str | None:
|
||||
"""提取客户端真实 IP,优先解析 ``x-forwarded-for``(与访问日志中间件一致)。"""
|
||||
@ -76,8 +65,11 @@ def _extract_client_ip(request: Request) -> str | None:
|
||||
|
||||
|
||||
def _sanitize_headers(headers: Any) -> dict[str, Any]:
|
||||
"""过滤敏感请求头,避免 ``authorization`` / ``cookie`` 等泄露到持久化层。"""
|
||||
return {key: value for key, value in headers.items() if key.lower() not in _SENSITIVE_HEADERS}
|
||||
"""过滤敏感请求头,避免 ``authorization`` / ``cookie`` 等泄露到持久化层。
|
||||
|
||||
敏感字段集合统一引用 ``yuxi.utils.crypto.SENSITIVE_HTTP_HEADERS``(单一事实源)。
|
||||
"""
|
||||
return {key: value for key, value in headers.items() if key.lower() not in SENSITIVE_HTTP_HEADERS}
|
||||
|
||||
|
||||
# ---------------- Request Schemas ----------------
|
||||
|
||||
Loading…
Reference in New Issue
Block a user