Im Laufe der letzten Jahrzehnte hat sich das Internet soweit entwickelt, dass es heute nicht mehr wegzudenken ist. Viele Prozesse des alltäglichen Leben hängen bereits vom Internet ab. Da ist es nicht verwunderlich, dass auch das Thema Datenschutz und Sicherheit im Internet eine immer größere Bedeutung gewinnen.

Security Headers

Um die Sicherheit einer Internetseite bestmöglich gewährleisten zu können greifen viele Faktoren. In diesem Beitrag möchten wir uns ausschließlich um die noch gar nicht so weit verbreitete Lösung der Security Headers kümmern, die schon mehrere Bereiche umfasst. Um die eigene Seite (oder auch andere) hinsichtlich der Sicherheitseinstellungen zu prüfen, bietet sich folgende Seite an: https://securityheaders.com/

 

Das obere Bild zeigt zwei wichtige Informationen:

  1. SSL-Erzwingung
    Hier ist gut zu erkennen, dass nur die Domain „roundaboutweb.net“ eingegeben wurde und automatisch auf „https://www.roundaboutweb.net“ umgeleitet wurde.
  2. Beurteilung A+
    Besser geht es nicht mehr. Alle aktuellen Prüfpunkte sind erfüllt und somit das Ergebnis ein sehr zufriedenstellendes A+

Links im Bild (Grand Totals) sind die möglichen Bewertungsstufen von „R“ bis „A+“ zu erkennen, sowie hierzu die Anzahl der gescannten Seiten mit Stand vom 28.03.2019.

Hall of Fame

Zugegeben, wir sind schon etwas stolz, dass wir am 28.03.2019 in der „Hall of Fame“, also der Bestenliste erscheinen, als einer der Wenigen mit der Bestnote A+. Damit schneiden wir sogar besser ab als manche große Seitenbetreiber wie zum Beispiel trello.

Wir konnten somit alle geprüften Sicherheitsanforderungen mit Bestnote erfüllen um unseren Seitenbesuchern eine möglichst sichere Seite zu bieten. Dafür haben wir auch einiges getan und freuen uns über diese Bewertung.

Aber nun weiter zu den eigentlichen Fakten:

Wozu brauche ich die Security Headers?

Grundsätzlich sollte es soweit selbsterklärend sein, dass eine Internetseite einen entsprechenden Sicherheitsstandard erfüllen muss oder zumindest sollte. Zum Einen fordert die Datenschutz-Grundverordnung (DS-GVO) und die bevorstehende ePrivacy die Verwendung von aktueller und sicherer Technik zum Schutz der Daten. Zum Anderen will man seine Seite auch zum Eigenschutz absichern um Angreifer möglichst fern zu halten und wenig Angriffsfläche zu bieten.

 

Zur Zeit werden folgende 7 Punkte bewertet:

1. Strict-Transport-Security

Stellt sicher, dass die Verbindung zwischen Browser und Internetseite ausschließlich per https aufgebaut wird.

Beispiel:

Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

Zudem ist jedoch auch noch erforderlich eine Datei außerhalb des Anwendungsverzeichnis zu erstellen und diese über eine „.user.ini“ im Anwendungsverzeichnis einzubinden:

Regeldatei, z. B. unter „/files/setheader.php“ folgenden Eintrag setzen:

<?php
header('Strict-Transport-Security: 15552000');

Und diese Datei über die Datei „.user.ini“ im Anwendungsverzeichnis einbinden:

auto_prepend_file=/files/setheader.php
2. Referrer-Policy

Verhindert die Verschleierung beim Aufruf über einen Link.
„same-origin“: Übermittelt die Herkunftseite
“no-referrer”: unterbindet die Übermittlung der URL bei Verlinkung

Beispiel:

Header set X-XSS-Protection "1; mode=block"
3. X-XSS-Protection

Aktiviert den Schutzfilter im Browser.

Beispiel:

Header set X-XSS-Protection "1; mode=block"
4. X-Frame-Options

Verhindert, dass die eigene Seite auf anderen Seiten per Frame eingebunden wird.
„DENY“: verbietet jede Einbettung
„SAMEORIGIN“: erlaubt die Einbettung der Seite in sich selbst
„ALLOW-FROM …“: erlaubt die Freigabe der Einbettung auf frei definierbaren Seite

Beispiel:

Header set x-frame-options "allow-from https://domain.tld"
5. X-Content-Type-Options

Nur korrekte Styles und Scripte werden geladen.
„nosniff“: Unterbindet das Erraten des Dateityp durch den Browser

Beispiel:

Header set X-Content-Type-Options "nosniff"

 

6. Feature-Policy

Verhindert beispielsweise die Nutzung von Webcams oder Mikrofonen auf der Seite.

Beispiel:

Header set Feature-Policy "none"

Diese Regel ist veraltet und wurde durch die Permissions-Policy ersetzt.

7. Permissions-Policy

Verhindert beispielsweise die Nutzung von Webcams oder Mikrofonen auf der Seite.

Beispiel:

Header set Permissions-Policy "geolocation=(self https://domain.tld), microphone=()"

 

8. Content-Security-Policy

Es werden nur explizit erlaubte Dateien geladen.

Beispiel:

Header set Content-Security-Policy "default-src 'none'; img-src 'self'; connect-src 'self'; script-src-elem 'self' 'unsafe-inline; frame-src 'self'; frame-ancestors 'self'"

Der „default-src“ ist der Standard, wenn keine andere Regel definiert ist. Im Idealfall (in der Realität sehr unwahrscheinlich) wäre dies die einzige CSP-Regel.
Die CSP ist sicherlich die umfangreichste Regeldefinition.

Es gibt jedoch noch weitere Header, wie zum Beispiel den „X-Powerd-By“ mit dem man die verwendete Software für die Seitenerstellung verbergen kann. Dieser wird hierbei jedoch (noch) nicht bewertet.

Wie kann meine Seite optimieren werden?

WordPress bietet auch hierzu unterschiedliche PlugIn-Lösungen an, die wir teilweise getestet haben. Hierbei mussten wir jedoch feststellen, dass es oftmals Probleme in Verbindung mit Caching-PlugIns oder anderen Security-PlugIns gibt. Da wir grundsätzlich versuchen mit möglichst wenig PlugIns zu arbeiten, da jedes PlugIn für sich selbst wieder ein Sicherheitsrisiko darstellt und negative Auswirkungen auf die Performance hat (vor allem im BackEnd), haben wir uns mit den Möglichkeiten direkt über die Webserverkonfiguration beschäftigt. Diese Konfigurationsmöglichkeit besteht bei professionellen Hostern auch in kleineren Paketen und ist daher unseres Erachtens die optimale Lösung ohne PlugIns mit wenig Codetext die Security Headers einer Seite zu optimieren.

Diese Einstellungen müssen individuell für jede Webseite angepasst werden, da jede Seite auch unterschiedliche Anforderungen und Funktionen hat. Das zudem positive an der Konfiguration über die Datei .htaccess ist, dass diese noch vor dem Aufruf der Anwendung (z.B. WordPress) ausgewertet wird und bei allen Systemen funktioniert, auch bei handgeschriebenen PHP- oder HTML-Anwendungen.

Muster

ACHTUNG: die folgenden Codezeilen für die .htaccess sind nicht pauschal gültig und können Fehler auf der Seite verursachen. Daher ist eine individuelle Anpassung zwingend erforderlich:

# Security Headers
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header set Referrer-Policy "same-origin"
Header set X-XSS-Protection "1; mode=block"
Header set x-frame-options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set Feature-Policy "none"
Header set Content-Security-Policy "self"
</IfModule>

Links:
Doku von Mozilla zu Header-Security
Policy-Wizard
Security Headers Scanner

Quellangaben:
Andreas Hecht von drweb.de
David Jardin von hosteurope.de
Rudolf Rohaczek von limesoda.com
Marian Dietrich von econsor.de

WordPress Cookie Hinweis von Real Cookie Banner