Cross-Site-Scripting und mehr verhindern: Sichere Websites durch Security-Header
Internet-Sicherheit aus dem HTTP-Header
Websites sind angreifbar. In der Kommunikation mit dem Nutzer müssen sie empfindliche Daten aufnehmen, verarbeiten und zurücksenden. In diesen Prozess können sich Hacker und Schad-Skripte einklinken. Sie manipulieren und ergänzen die Kommunikation, um Nutzerdaten auszulesen und ganze Websites lahm zu legen.
Gerade die Betreiber von Onlineshops sind hiervon betroffen. Werden Sicherheitslücken in ihrer Software bekannt, müssen sie schnell reagieren. Ansonsten droht ihnen Opfer einer Attacke oder eines Erpressers zu werden. Umso wichtiger ist es, das Thema Internet-Sicherheit nicht allein der Shop-Software zu überlassen. Mit Einstellungen am HTTP-Header können viele Sicherheitslücken geschlossen oder zumindest eingedämmt werden. Diese Einstellungen nennen wir Security-Header.
Im Folgenden stellen wir euch einige dieser Security-Header vor und zeigen, wogegen sie eingesetzt werden können. Im Anschluss erläutern wir euch, wie ihr diese Einstellungen in eurem Webserver hinzufügen könnt.
Wichtig vorab: Der erste Schritt zu einer sicheren Website ist ein SSL-Zertifikat. Security-Header funktionieren teilweise nur über eine HTTPS-Verbindung. Wir gehen bei der Beschreibung der Security-Header davon aus, dass du bereits ein SSL-Zertifikat verwendest.
Du willst wissen, wie gut deine Website bereits durch Security-Header geschützt ist? Unter diesem Link kannst du deine Website kostenlos testen lassen.
Security-Header im Überblick
Content-Security-Policy (CSP)
Mit einer Content-Security-Policy bestimmst du, von wo aus Inhalte auf deiner Website geladen werden dürfen. Dadurch kannst du zum Beispiel unterbinden, dass durch eingeschleusten Code ein Schad-Skript von außerhalb aufgerufen wird. Das hilft besonders gegen Cross-Site-Scripting, kurz XSS. Bei einer XSS-Attacke wird fremder Code, meist in Form von JavaScript, auf der Seite ausgegeben. Hacker nutzen hierbei Eingabe-Formulare oder Parameter in der URL.
Du kannst die CSP für Skripte (script-src
) auf den Wert 'self'
setzen. In diesem Fall wird deine Website nur noch JavaScript-Code ausführen, der auf deinem Server liegt. Wird auf der Website weiterer Code von vertrauenswürdigen Quellen eingesetzt, kann man diese als weitere Parameter ergänzen.
Durch diese Maßnahme wird Cross-Site-Scripting komplett unterbunden – jedoch auch jeglicher JavaScript-Code, der inline – also direkt im Quellcode der Website – aufgerufen wird. Du kannst deine Einstellungen erst einmal über die Test-Funktion Content-Security-Policy-Report-Only
überprüfen.
X-XSS-Protection
Dieser Security-Header bietet einen zusätzlichen Schutz gegen Cross-Site-Scripting. Durch X-XSS-Protection überprüft der Browser übertragene Daten. Erkennt er dabei Muster von XSS, wird deren Ausgabe abgelehnt. Das ist besonders für Nutzer wichtig. Allerdings funktioniert die X-XSS-Protection am besten in Chrome. Andere Browser kennen den Security-Header zwar auch, setzen ihn aber nicht so gut um. Tests mit Firefox haben sogar ergeben, dass der Schutz gar nicht greift und XSS weiterhin möglich ist.
Die X-XSS-Protection sollte daher als Ergänzung zu einer gut eingestellten Content-Security-Policy genutzt werden. Aktiviert wird sie einfach durch das Setzen auf 1
und kann, wie auch die CSP, um eine Test-Ausgabe erweitert werden.
X-Frame-Options
Eine beliebte Methode von Kriminellen ist das sogenannte Clickjacking. Dabei wird eine Website unter einer anderen URL in einen Frame geladen. Dem ungeschulten Nutzer fällt dabei nicht auf, dass er nicht auf der eigentlichen Website aktiv ist. Über sensible Eingabe-Masken wie beispielsweise den Login werden dann unsichtbare Felder gelegt, die die eingegebenen Daten mitlesen. Im schlimmsten Fall gelangen die Betrüger so an zahlreiche Login-Daten.
Mit dem Security-Header X-Frame-Options kannst du Clickjacking unterbinden. Auf dem Wert DENY
darf deine Website nicht mehr in einem Frame erscheinen. Stellst du die X-Frame-Options auf SAMEORIGIN
, ist das Einbinden unter deiner eigenen Domain immer noch möglich.
X-Content-Type-Options
Bei der Anfrage einer Website werden meistens zusätzliche Dateien heruntergeladen. In der Regel sind das Bilder oder Skript-Dateien. Kann der Browser die Inhalte dieser Dateien nicht selbst wiedergeben fragt er den Nutzer, ob er die Datei herunterladen und ausführen will. Diese Komfort-Funktion kann auf verschiedenen Wegen für Drive-by-Downloads ausgenutzt werden. Über Cross-Site-Scripting beispielsweise kann Schad-Software auf einer Website platziert werden. Das geschieht meist unter der Tarnung einer Stylesheet-Datei. Beim Laden der Website wird die Schad-Software dann vom Nutzer ausgeführt. Das wurde im Zuge der Spectre-Meltdown-Krise massiv ausgenutzt.
Um zu verhindern, dass diese Drive-by-Downloads ausgeführt werden, kann der Security-Header X-Content-Type-Options eingerichtet werden. Auf den Wert nosniff
gesetzt, werden Skript-Dateien geprüft. Ist der MIME-Typ nicht wie angegeben CSS oder JavaScript, wird die Datei nicht ausgeführt.
Referrer-Policy
Über den HTTP-Header werden nicht nur die hier präsentierten Security-Header übergeben. Darin können sich auch Information über den Webserver und die Aktivität des Nutzers befinden. Eine dieser Angaben ist der Referrer-Header. Klickt ein Nutzer auf einen Link, dann wird die Angabe der Ausgangsseite an die Zielseite übertragen. Das wird im Referrer-Header gespeichert. Auf der Basis dieser Angaben lassen sich Informationen ermitteln. Diese sind zum Beispiel für Tracking-Software wie Google-Analytics relevant.
Durch eine Referrer-Policy kannst du festlegen, an welche Seiten diese Nutzer-Information weitergeleitet werden soll. Auf dem Wert no-referrer
betrifft dies alle Seiten. Wird er dagegen auf no-referrer-when-downgrade
gesetzt, so werden Websites ausgeschlossen, die weniger sicher sind.
Security-Header selbst einrichten
Im Apache-Webserver
Wir empfehlen, die Einstellungen der Security-Header in der Konfiguration des Webservers vorzunehmen. In der weit verbreiteten Webserver-Software Apache lassen sich die Beispiele von oben in die Datei „httpd.conf“ eintragen:
<code>
<IfModule mod_headers.c>
<Directory />
Header always set Content-Security-Policy „script-src ’self'“
Header always set X-XSS-Protection „1“
Header always set X-Frame-Options „SAMEORIGIN“
Header always set X-Content-Type-Options „nosniff“
Header always set Referrer-Policy „no-referrer-when-downgrade“
</Directory>
</IfModule>
Im Nginx-Webserver
Der moderne Webserver gewinnt immer mehr an Popularität. Nginx ist auf die Beschleunigung von Antwortzeiten optimiert. Dadurch verkürzt es die Ladezeiten einer Website.
Die Konfigurations-Datei befindet sich üblicherweise im Unterordner „conf.d“ unter dem Namen deiner Domain. Für die Domain „example.com“ wäre das zum Beispiel „example.com.conf“. Im Block „server“ wird Folgendes ergänzt:
<code>
server {
add_header Content-Security-Policy „script-src ’self'“;
add_header X-XSS-Protection „1“;
add_header X-Frame-Options „SAMEORIGIN“;
add_header X-Content-Type-Options „nosniff“;
add_header Referrer-Policy „no-referrer-when-downgrade“;
}
</code>
Fazit
Durch die Einrichtung der Security-Header kann mit wenig Aufwand viel für eine sichere Website erreicht werden. Wichtig ist dabei zu berücksichtigen, dass die Maßnahmen nicht allein für eine sichere Website sorgen können. Viel mehr arbeiten sie im Verbund mit anderen Schutz-Maßnahmen, um Attacken wie Cross-Site-Scripting zu verhindern.
Hast du die beschriebenen Security-Header eingefügt? Dann ruf doch nochmal den Link von oben auf und teste deine Website erneut. Mit Sicherheit wirst du nun eine viel bessere Einstufung erhalten.