Content Security Policy
Was die Content Security Policy deiner Site blockiert hat oder als Report-only-Policy blockieren würde, wie der Browser es meldet.
Eine Content Security Policy (CSP) legt fest, welche Scripts, Styles, Frames und Verbindungen eine Seite nutzen darf. Nennt deine Policy fastmon als Report-Endpunkt, landet jeder Verstoß hier, auch auf Seiten, die den Tracker nie ausgeführt haben.
Einrichten
Zwei Response-Header schicken die Reports der Policy an fastmon. Header, Server-Beispiele, Prüfung und Stolperfallen stehen in der Anleitung CSP-Verstöße an fastmon melden.
fastmon schreibt, liefert und erzwingt die Policy nicht. Es speichert die Reports, die der Browser schickt.
Die Seite Content Security Policy
Die Seite liegt in der Sidebar unter Fehler → Content Security Policy, unter /errors/csp. Sie hat zwei Tabs, und der Tab steht in der URL.
- Übersicht: Verstöße im Zeitverlauf, gestapelt Nach Direktive oder Nach Policy, blockierte Reports unter den Report-only-Reports.
- Karten für das, was blockiert wurde, die Seiten und Scripts mit Verstößen, Direktiven, Sites, Länder, Netzwerke, Geräte, Browser, OS und Traffic.
- Sites dient zugleich als Einrichtungs-Check. Jede Site zeigt ihren letzten Report, und eine Site ohne Report fragt, ob ihre Policy fastmon nennt.
- Reports: eine Tabelle aller CSP-Reports mit Zeit, Policy, Direktive, Blockiertem, Seite, Gerät, Browser, Besucher und Land. Gruppen und Seiten funktionieren wie bei Network Error Logging. Eine Zeile öffnet alle gespeicherten Felder und die verletzte Policy, und die Adresse verlinkt darauf.
Filtern funktioniert wie bei Network Error Logging: + filtert auf einen Wert, - schließt ihn aus, und die Lupe öffnet die Reports der Zeile. Die eigenen Filter der Seite (blockiert oder Report-only, Direktive, blockierte URL, Seite, Script) stehen im Filter-Panel unter Nur auf dieser Seite und bleiben in der URL. Add directive bietet jede Direktive an, die des Zeitraums zuerst.
Die Journey eines Besuchers unter Besucher zeigt seine CSP-Reports zwischen den Seitenaufrufen, blockierte in Rot, Report-only in Gelb.
Einen Report lesen
| Feld | Bedeutung |
|---|---|
disposition | enforce: Der Browser hat es blockiert. report: Eine Report-only-Policy hätte es blockiert. Leer, wenn der Browser es nicht sagt. |
effective_directive | Die verletzte Direktive, etwa script-src-elem. |
blocked_url | Was blockiert wurde: eine URL ohne Query oder ein Schlüsselwort wie inline, eval oder data. |
source_url | Das Script, das gegen die Policy verstoßen hat, mit line und column. |
page_url | Die Seite, auf der der Verstoß passiert ist. |
original_policy | Die Policy, die die Seite geschickt hat, mit geleerten Nonces. Daran siehst du, aus welcher Version einer Report-only-Policy ein Report stammt. |
report_count | Identische Reports eines Uploads, als eine Zeile gespeichert. |
- Ein Script, das eine Browser-Erweiterung einschleust, meldet sich als
inlineauf deiner Seite und ist von deinem eigenen Inline-Code nicht zu unterscheiden. Reports mit einer Erweiterungs-URL werden verworfen. - Erst testen, dann erzwingen. Schick die neue Policy als
Content-Security-Policy-Report-Onlyund behebe, was der Breakdown nachblocked_urlauflistet.
Grenzen
- Praktisch jeder Browser meldet, über
report-tooderreport-uri. Die Zahlen sind exakt und nicht gesampelt. - Besucherzahlen brauchen
store_stitch. Eine Site ohne zählt bei den Reports mit, aber nicht bei den Besuchern, und die Seite nennt sie. - Ein
report-to-Report kann bis zu 48 Stunden später ankommen. Er wird dem Besucher mit der ID des Uploads zugeordnet.
API
Alle drei Routen nehmen dieselben filters, darunter disposition, effective_directive, blocked_url, source_url, page_url und status_code_range samt exclude. Jede andere Analytics-Route lehnt disposition, effective_directive, blocked_url und source_url mit 422 ab.
| Route | Liefert |
|---|---|
POST /analytics/csp | Reports und betroffene Besucher, je Direktive und Disposition, im Zeitverlauf |
POST /analytics/csp/breakdown | Reports nach einer dimension gruppiert, mit Anteil, Besuchern, first_seen_at und last_seen_at. Ein Schlüssel passt zurück in seinen Filter. |
POST /analytics/csp/reports | Einzelne Reports, neueste zuerst, seitenweise über cursor. filters.report_id wählt einen aus. |
Die Besucher-Details und die Checkout-Journeys tragen csp_reports neben nel_reports, ohne die Policy.