Die Content-Security-Policy (CSP) entstand ursprünglich unter dem Namen "Content-Restriction", der Grund dafür war die damals zunehmenden Sicherheitslücken bei Internetskripten wie z.B. durch Cross-Site-Scripting (XSS). In diesem Artikel gehe ich auf die Implementierung des CSP-Frame-Vorfahren ein.
Die Richtlinie "frame-ancestors", legt fest welche Domains die Seite in Frames und iFrames einbauen bzw. einbetten dürfen und funktioniert mit allen aktuellen Browserversionen außer dem Internet Explorer IE. Siehe hierzu auch https://caniuse.com/?search=frame-ancestors oder https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors .
- "frame-ancestors 'none';" ==> Alle ablehnen
- "frame-ancestors 'self';" ==> Selber erlaubt, aber alle anderen ablehnen
- "frame-ancestors 'self' 'shemel.de' 'test.de';" ==> Selber erlaubt, und bestimmte Domains zulassen
Damit der Browser die Content Security Policy anwendet, muss vor der Auslieferung des HTML-Dokuments ein spezieller HTTP-Header gesetzt werden. Hierfür gibt es die folgenden Möglichkeiten:
HTML-Code: <meta>-Element hinzufügen
Wird vom Webserver kein CSP-Header versendet, kann dies mit den den folgenden <meta>-Elementen nachgeholt werden:
<head>
...
<meta http-equiv="Content-Security-Policy" content="frame-ancestors 'none';">
<meta http-equiv="X-Content-Security-Policy" content="frame-ancestors 'none';">
<meta http-equiv="X-WebKit-CSP" content="frame-ancestors 'none';">
...
</head>
Ähnlich funktioniert dies auch bei serverseitigen Scriptsprachen, wie zum Beispiel PHP:
<?php
...
header("Content-Security-Policy: frame-ancestors 'none';");
header("X-Content-Security-Policy: frame-ancestors 'none';");
header("X-WebKit-CSP: frame-ancestors 'none';");
...
?>
Webserver Konfiguration: Apache HTTP
Das Modul mod_headers muss aktiv sein:
a2enmod headers //Enabling module headers.
Anschließend muss die Konfiguration in der httpd.conf angepasst werden:
Header set Content-Security-Policy "frame-ancestors 'none';"
Nach dem Speichern der Datei muss der Apache Webserver neu gestartet werden.
Keine Kommentare:
Kommentar veröffentlichen