38 lines
1.3 KiB
JSON
38 lines
1.3 KiB
JSON
{
|
|
"feature_id": "F-078",
|
|
"verdict": "APPROVED",
|
|
"checks": [
|
|
{
|
|
"name": "Auth on SSE endpoint",
|
|
"result": "PASS",
|
|
"notes": "Endpoint requires authenticate() + admin role; no anonymous subscription."
|
|
},
|
|
{
|
|
"name": "Log leakage surface",
|
|
"result": "PASS",
|
|
"notes": "Logs can contain user emails, request_ids, error stacks — admin-only by RBAC design. No PII surfaces beyond what audit already shows."
|
|
},
|
|
{
|
|
"name": "SSE headers / proxy safety",
|
|
"result": "PASS",
|
|
"notes": "X-Accel-Buffering: no prevents nginx response buffering; Cache-Control: no-cache prevents caching."
|
|
},
|
|
{
|
|
"name": "Client disconnect cleanup",
|
|
"result": "PASS",
|
|
"notes": "LogBroadcaster.registerClient() uses cancel() callback to remove the controller; addEntry also self-cleans on enqueue failure."
|
|
},
|
|
{
|
|
"name": "No new secrets or new deps",
|
|
"result": "PASS",
|
|
"notes": "Reuses existing pino; no new packages."
|
|
}
|
|
],
|
|
"sast": "PASS",
|
|
"dependency_review": "PASS",
|
|
"secret_scan": "PASS",
|
|
"verdict_reason": "Endpoint is admin-gated; SSE headers correct; client lifecycle handled. No new attack surface.",
|
|
"reviewer": "security",
|
|
"reviewed_at": "2026-08-19T20:58:30Z"
|
|
}
|