feat(csp): add worker-src directive for ALTCHA proof-of-work in admin CSP
This commit is contained in:
@@ -84,3 +84,4 @@ endpointهایی که وقتی `ALTCHA_ENABLED=true` است فیلد `altcha` ر
|
||||
- انقضا (`ALTCHA_EXPIRE_SECONDS`) داخل salt امضاشده است.
|
||||
- استفادهی یکباره: signature هر challenge در pool اختصاصی Redis (`altcha.pool`) تا زمان انقضا نگهداری میشود → ضدِ replay.
|
||||
- کپچا مکملِ rate-limit موجود است، نه جایگزین آن.
|
||||
- **CSP:** widget حل proof-of-work را داخل Web Workerهای `blob:` انجام میدهد؛ CSP پنل ادمین (`AdminCspSubscriber`) باید `worker-src 'self' blob:` داشته باشد، وگرنه widget با `state=error` میماند و کپچا هرگز حل نمیشود.
|
||||
|
||||
@@ -38,6 +38,7 @@ final class AdminCspSubscriber implements EventSubscriberInterface
|
||||
'Content-Security-Policy',
|
||||
"default-src 'self'; "
|
||||
. "script-src 'self'; "
|
||||
. "worker-src 'self' blob:; " // ALTCHA proof-of-work solver runs in blob: Web Workers
|
||||
. "style-src 'self' 'unsafe-inline'; " // Tailwind / CKEditor inline styles
|
||||
. "img-src 'self' data: blob:; "
|
||||
. "font-src 'self' data:; "
|
||||
|
||||
@@ -20,6 +20,9 @@ class AdminCspSubscriberTest extends WebTestCase
|
||||
self::assertStringContainsString("default-src 'self'", $csp);
|
||||
self::assertStringContainsString("object-src 'none'", $csp);
|
||||
self::assertStringContainsString("frame-ancestors 'none'", $csp);
|
||||
// ALTCHA solves its proof-of-work inside blob: Web Workers; without this
|
||||
// directive the login captcha errors out (worker-src falls back to script-src).
|
||||
self::assertStringContainsString("worker-src 'self' blob:", $csp);
|
||||
}
|
||||
|
||||
public function testNonAdminResponseDoesNotGetTheAdminCsp(): void
|
||||
|
||||
Reference in New Issue
Block a user