XSS-Bremse Content Security Policy

Seite 5: Rauchmelder

Inhaltsverzeichnis

Mit Hilfe der Direktive report-uri können die Browser angewiesen werden, Verstöße gegen die Policy zu berichten. Dieses Feature ist zum einen während der Entwicklung und im Pilotbetrieb hilfreich, um Fehler in der Policy zu finden. Zum anderen erlaubt es die Erkennung von Angriffen im Produktivbetrieb. Als kleiner Wermutstropfen bleibt allerdings, dass auch Browser-Extensions Verstöße gegen die Policy erzeugen können. Somit handelt es sich nicht bei jedem Report um einen Policy-Fehler oder Angriff.

Das Ziel muss aus Sicherheitsgründen in der gleichen Domain wie die Webseite liegen. Damit der Browser die Berichte verschickt, ergänzt man die Policy zum Beispiel um report-uri rauchmelder.php. Das sorgt dafür, dass Verletzungen der Policy künftig als POST-Request an rauchmelder.php geschickt werden. Die Daten sind JSON-formatiert und sogar noch etwas ausführlicher als die Warnungen, die über die Konsole ausgegeben werden.

Das Skript rauchmelder.php könnte den Report zum Beispiel in das Error-Log des Webservers schreiben:

<?php
error_log('CSP-Report von '.$_SERVER['REMOTE_ADDR'].': User Agent: .$_SERVER['HTTP_USER_AGENT'].' Fehlerbericht: '.file_get_contents('php://input'));
?>

Auf die PHP-Fehlerberichte hat man häufig auch dann Zugriff, wenn man Webspace angemietet hat. Bei 1&1 etwa muss man dazu das Error-Reporting zunächst über eine Datei namens php.ini aktivieren, die sich im gleichen Verzeichnis wie das PHP-Skript befindet. In diesem Fall muss man als absoluten Pfad angeben, wo der Fehlerbericht gespeichert werden soll. Das Grundverzeichnis erfährt man über den PHP-Befehl echo($_SERVER['‚REDIRECT_DOCUMENT_ROOT']);. Damit nur der Webmaster erfährt, an welchen Stellen die Webseite potenziell verwundbar ist, muss der Fehlerbericht in einem geschützten Verzeichnis gespeichert werden.