CSP-Verstöße an fastmon melden
Zwei Response-Header, und der Browser meldet jeden Verstoß gegen deine Content Security Policy an fastmon.
Nennst du fastmon als Report-Endpunkt deiner Policy, schickt der Browser jeden Verstoß an fastmon. Eine neue oder verschärfte Policy kann zuerst als Content-Security-Policy-Report-Only laufen, so siehst du, was sie kaputt machen würde, bevor sie etwas blockiert. Was die Reports zeigen, steht unter Content Security Policy.
Einrichten
- Trag den
collector_hashder Application im Panel unten ein oder öffne die Seite mit?collector_hash=. Alle Snippets der Seite übernehmen ihn dann. - Schick die beiden Header bei jeder HTML-Response der Site mit.
- Stell sicher, dass jeder Host, der sie schickt, eine Site dieser Application ist oder eine Subdomain davon.
- Prüf, dass ein Report ankommt.
Dein Snippet
Aus der App geöffnet stehen hier die echten Werte deiner Application. Sonst trage sie hier ein, dann aktualisieren sich alle Snippets auf dieser Seite.
Beide Hashes findest du in der App unter Applications → ··· → IDs & Hashes.
Ein Report, dessen Host keine Site der Application ist, wird verworfen, und ein Report legt nie eine Site an. www.shop.example zählt für shop.example, notshop.example nicht.
Die Header
Reporting-Endpoints: fastmon-csp="https://fastmon.site/c/v/{collector_hash}"Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' https://js.payments.example; report-to fastmon-csp; report-uri https://fastmon.site/c/v/{collector_hash}Die Policy ist ein Beispiel. Behalte deine eigenen Direktiven und ergänze report-to und report-uri. Eine Application mit eigenem Collector-Endpunkt nutzt ihren Host statt fastmon.site.
- Bei jeder HTML-Response. Eine Policy gilt für das Dokument, das sie trägt, nicht für die Bilder oder Scripts, die es lädt.
Reporting-Endpointsneben der Policy. Der Header definiert die Gruppefastmon-csp, diereport-tonennt.Report-To, das NEL braucht, ist hier nicht nötig.report-toundreport-urizusammen. Neuere Browser nutzenreport-tound ignorierenreport-uri, ältere schicken nurreport-uri. Jeder Verstoß kommt einmal an.- Auch die erzwingende Policy kann melden. Ergänze dieselben zwei Direktiven in
Content-Security-Policy. Jeder Report sagt, ob blockiert oder nur gemeldet wurde. - Lass
'report-sample'weg. fastmon verwirft das Code-Sample ungelesen, siehe Datenschutz → CSP-Reports.
Beispiele
server { listen 443 ssl; server_name shop.example; add_header Reporting-Endpoints 'fastmon-csp="https://fastmon.site/c/v/{collector_hash}"' always; add_header Content-Security-Policy-Report-Only "default-src 'self'; report-to fastmon-csp; report-uri https://fastmon.site/c/v/{collector_hash}" always;}Ein location-Block mit eigenem add_header erbt nichts von server, wiederhole dort also beide Zeilen.
Prüfen
- Die Header kommen an. Prüf im Netzwerk-Tab des Browsers den Dokument-Request auf
Reporting-Endpointsund den Policy-Header. - Ein Verstoß erscheint. Verbietet eine Report-only-Policy etwas, das die Seite lädt, schreibt die Konsole pro Verstoß eine Meldung
[Report Only]. Chrome lädtreport-to-Reports nach etwa einer Minute hoch, einreport-uri-Report geht sofort raus. - Der Endpunkt antwortet. Teste beide Formate ohne Browser, mit einer registrierten Site statt
shop.example:
curl -i https://fastmon.site/c/v/{collector_hash} \-H 'Content-Type: application/reports+json' \--data '[{"age":0,"type":"csp-violation","url":"https://shop.example/","body":{"documentURL":"https://shop.example/","blockedURL":"https://cdn.example/x.js","effectiveDirective":"script-src-elem","disposition":"report","statusCode":200}}]'curl -i https://fastmon.site/c/v/{collector_hash} \-H 'Content-Type: application/csp-report' \--data '{"csp-report":{"document-uri":"https://shop.example/","blocked-uri":"inline","effective-directive":"script-src-elem","disposition":"report","status-code":200}}'Der Endpunkt antwortet mit 204, egal ob er den Report behalten oder verworfen hat. Die Karte Sites auf der Seite Content Security Policy zeigt den letzten Report jeder Site.
Stolperfallen
- Eine lange Policy füllt den Upload. Ein Upload ist auf 128 KiB begrenzt, und jeder Report trägt die ganze Policy. Verstößt eine Seite pro Aufruf dutzendfach gegen eine Policy von mehreren Kilobyte, kann das die Grenze sprengen, und der Browser verwirft den Upload.
- Shopify-Storefronts erlauben keine eigenen Response-Header, ein Shopify-Shop kann also keine Policy schicken, die an fastmon meldet.
- Jede Application hat ihren eigenen Hash. Ein Report für eine Site einer anderen Application wird verworfen, auch in derselben Organisation.
- Eine Hash-Rotation stoppt die Reports ohne Warnung. Trag den neuen
collector_hashin beide Direktiven ein. - Ein First-Party-Proxy muss
/c/v/und denOPTIONS-Preflight vor einemreport-to-Upload weiterleiten. Ein Blocklocation /c/deckt beides ab.