Einführung
Was sind HTTP-Security Header?
Wenn es um die Sicherheit ihrer Website geht, denken viele Menschen zuerst an Firewalls und passwortgeschützte Bereiche. Ein oft übersehener, aber mindestens genauso wichtiger Aspekt der Website-Sicherheit sind HTTP-Security Header.
Aber was genau sind HTTP-Security Header? Im Grunde sind es zusätzliche Anweisungen, die an den Browser gesendet werden, um ihm mitzuteilen, wie er mit bestimmten Aspekten der Website umgehen soll. Dies kann Anweisungen zur Blockierung von Inhalten von unsicheren Quellen, zur Erzwingung von verschlüsseltem Datenverkehr und zur Verhinderung von Angriffen wie Clickjacking und Cross-Site-Scripting beinhalten.
Warum sind HTTP-Security Header wichtig für die Sicherheit Deiner Website?
Warum sind HTTP-Security Header wichtig? Ohne diese zusätzlichen Anweisungen kann ein Angreifer möglicherweise durch Schwachstellen in der Website navigieren und sensible Daten stehlen oder Schaden anrichten.
Mittels HTTP-Security Header kannst Du potenziellen Angreifern eine zusätzliche Hürde in den Weg legen und Deine Website und Deine Besucher besser schützen.
Es ist wichtig zu verstehen, dass die Verwendung von HTTP-Security Header keine 100%-ige Sicherheit garantiert. Sie sollten jedoch ein wichtiger Bestandteil einer umfassenden Sicherheitsstrategie für Deine Website sein. In den nächsten Kapiteln werden wir uns die verschiedenen Arten von HTTP-Security Header ansehen und erläutern, wie sie Dir helfen können und wie man sie implementiert.
Arten von HTTP-Security Header
Es gibt mehrere Arten von HTTP-Security Header, die verwendet werden können. Im Folgenden stellen wir Dir die Wichtigsten vor:
Content Security Policy (CSP): Dieser Header ermöglicht es Dir, anzugeben, von welchen Quellen der Browser Inhalte auf Deine Website laden darf. Auf diese Weise kannst Du verhindern, dass bösartiger Code von unsicheren Quellen auf Deiner Website ausgeführt wird.
HTTP Strict Transport Security (HSTS): Dieser Header erzwingt die Verwendung von HTTPS (und somit verschlüsselter Datenverkehr) auf Deiner Website. Dies schützt vor Man-in-the-Middle-Angriffen, bei denen ein Angreifer versucht, den Datenverkehr abzufangen.
Referrer-Policy: Dieser Header ermöglicht es Dir, die Art und Weise zu steuern, wie der Referrer-Header (enthält die URL der Webseite, von der aus der Benutzer zu der aktuellen Seite navigiert ist) gesendet wird. Dies kann verwendet werden, um zu verhindern, dass private Informationen versehentlich an Dritte weitergegeben werden.
Permissions-Policy: Mit diesem Header kannst Du angeben, welche Funktionen des Browsers (oder Systems) Deine Website verwenden darf, z.B. Standortzugriff, Kamera, Mikrofon, etc.
X-Frame-Options: Dieser Header verhindert, dass Deine Website in einem Frame oder iframe auf einer anderen Website angezeigt wird, wodurch Angriffe wie Clickjacking verhindert werden.
X-XSS-Protection: Dieser Header soll nicht mehr verwendet werden oder auf 0 gesetzt werden. (Besser ist die Nutzung von Content-Security-Policy für diesen Zweck) Er aktivierte den integrierten XSS-Schutz des Browsers, der versucht, Angriffe durch Cross-Site-Scripting zu verhindern.
X-Content-Type-Options: Dieser Header verhindert, dass der Browser versucht, die Art des Inhalts automatisch zu erraten (MIME-Sniffing), was Angriffe ermöglichen kann.
Es ist wichtig zu beachten, dass kein einzelner Header alle Sicherheitsprobleme lösen wird. Eine Kombination verschiedener Header und weiterer Sicherheitsmaßnahmen ist erforderlich, um eine Website optimal zu schützen. In den nächsten Kapiteln werden wir uns die einzelnen Header genauer ansehen und erläutern, wie sie verwendet werden können, um die Sicherheit Deiner Website zu erhöhen.
Wie HTTP-Security Headerfunktionieren
In den vorherigen Kapiteln haben wir uns die verschiedenen Arten von HTTP-Security Header angeschaut. In diesem Kapitel werden wir uns ansehen, wie man diese Header anwenden kann.
In dem OWASP Vorschlag für die Security Header kann man sich für die eigene Website einiges abschauen. Der offizielle Vorschlag kann auf deren Website angesehen werden.
Es ist wichtig zu beachten, dass die Verwendung von HTTP-Security Header keine 100%-ige Sicherheit garantiert. Allerdings sind sie ein wichtiger Bestandteil einer umfassenden Sicherheitsstrategie, die dazu beiträgt, potenzielle Angreifer abzuschrecken und die Website und ihre Besucher besser zu schützen.
Content Security Policy (CSP)
CSP ermöglicht es, anzugeben, von welchen Quellen der Browser welche Inhalte auf Deine Website laden darf. Dies kann beinhalten, dass der Browser nur Inhalte von derselben Domain lädt oder dass bestimmte Arten von Inhalten, wie Skripte oder Bilder, von bestimmten Quellen blockiert werden. Dadurch kann verhindert werden, dass bösartiger Code von unsicheren Quellen auf Deiner Website ausgeführt wird.
Die CSP bietet viele Einstellungsmöglichkeiten, mit denen das Verhalten des Browsers sehr präzise angepasst werden kann. Mit diesem Header kann man die Funktionalität der Website zerstören, darum sollte man ihn sehr gut verstehen, bevor man ihn konfiguriert. Folgendes Beispiel ist deshalb mit Vorsicht zu genießen.
Content-Security-Policy default-src 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content
Imer die Website testen, nachdem ein CSP eingebaut wurde!
Dein Website-Radar Team.
HTTP Strict Transport Security (HSTS)
HSTS erzwingt die Verwendung von HTTPS auf Deiner Website. Wenn der Browser diesen Header empfängt, wird er automatisch alle Anforderungen an die Website über HTTPS senden, selbst wenn der Benutzer http verwendet hat. Auf diese Weise kann verhindert werden, dass Angreifer den Datenverkehr abfangen und manipulieren.
Hier eine mögliche Konfiguration:
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Der Parameter max-age gibt die Dauer (in Sekunden) an, wie lange der Browser die Vorschrift beachten soll, dass die Seite nur über HTTPS aufgerufen werden darf. Mit includeSubdomains werden alle Unterdomains ebenfalls in diese Regel einbezogen.
Referrer-Policy
Referrer-Policy ermöglicht es Dir, die Art und Weise zu steuern, wie der Referrer-Wert bei ausgehenden Links gesendet wird. Der Browser kann entweder der Seite des ausgehenden Links mitteilen, von wo er gekommen ist oder eben nicht (no-referrer).
Referrer-Policy: no-referrer
Somit ist die Referrer-Policy vor allem für den Datenschutz relevant.
Permissions-Policy
Mit diesem Header kannst Du angeben, welche Web-API-Berechtigungen der Browser für Deine Website verwenden darf. Du kannst somit die Zugriffsrechte auf bestimmte Web-APIs wie Standort, Kamera, Mikrofon unterbinden oder zulassen und somit die Privatsphäre der Benutzer schützen.
Ein Beispiel: Mit der Direktive „accelerometer“ steuerst Du, ob die aktuelle Seite die Möglichkeit hat, Informationen über die Beschleunigung des Geräts mithilfe der Accelerometer-Schnittstelle zu sammeln.
Permissions-Policy: accelerometer=(),autoplay=(),camera=(),display-capture=(),encrypted-media=(),fullscreen=(),gamepad=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),midi=(),payment=(),picture-in-picture=(),publickey-credentials-get=(),sync-xhr=(self),usb=(),screen-wake-lock=(),web-share=(),xr-spatial-tracking=()
Somit ist die Permissions-Policy vor allem für die Datensicherheit des Benutzers relevant.
X-Frame-Options
X-Frame-Options verhindert, dass Deine Website in einem Frame oder iframe auf einer anderen Website angezeigt wird. Dies schützt vor Angriffen wie Clickjacking, bei denen ein Angreifer versucht, den Benutzer dazu zu bringen, auf einen gefälschten Button zu klicken, indem er die gefälschte Schaltfläche in einem Frame auf einer vertrauenswürdigen Website anzeigt. Wenn der Browser diesen Header empfängt, wird er verhindern, dass die Website in einem Frame oder iframe angezeigt wird, und stattdessen eine Fehlermeldung anzeigen.
Wenn der Wert deny verwendet wird, wird das Laden von Inhalten in einem Frame komplett blockiert. Bei sameorigin können nur Inhalte geladen werden, die von der gleichen Quelle stammen wie der Frame selbst.
X-Frame-Options: DENY
X-XSS-Protection
X-XSS-Protection soll nicht mehr verwendet werden oder aber auf 0 gesetzt werden. (laut OWASP Secure Header Project) Dieser Header aktivierte den integrierten XSS-Schutz (Cross Site Scripting Schutz) des Browsers. Stattdessen soll der Cross Site Scripting Schutz in der Content-Security-Policy eingebaut werden.
X-XSS-Protection: 0
Dieser Header ist veraltet (deprecated) und wird von modernen Browsern nicht mehr unterstützt. Seine Verwendung kann zu zusätzlichen Sicherheitsproblemen auf der Client-Seite führen.
Dein Website-Radar Team
X-Content-Type-Options
X-Content-Type-Options verhindert, dass der Browser versucht, die Art des Inhalts automatisch zu erraten (MIME-Sniffing). Dies kann Angriffe ermöglichen, bei denen ein Angreifer versucht, den Browser dazu zu bringen, bösartigen Code auszuführen, indem er diesen als harmlosen Inhalt tarnt. Wenn der Browser diesen Header empfängt, wird er die Art des Inhalts nicht automatisch erraten und stattdessen die vom Server angegebene Art verwenden. Also am besten ausschalten:
X-Content-Type-Options: nosniff
Implementierung von HTTP-Security Header
Jetzt, da Du verstehst, was HTTP-Security Header sind und wie sie funktionieren, ist es an der Zeit, sie in Deiner Website zu implementieren. In diesem Kapitel werden wir uns ansehen, wie man dies am besten macht.
Zunächst musst Du entscheiden, welche Header Du auf Deiner Website verwenden möchtest. Nun musst Du sie in den HTTP-Header Deiner Website einfügen. Dies kann je nach Website-Konfiguration unterschiedlich sein. Wenn Du beispielsweise eine statische Website hast, kannst Du die Header direkt in den HTML-Dateien einfügen. Hast Du jedoch eine dynamische Website, musst Du die Header möglicherweise über den Server oder das Content Management System integrieren.
Nachdem die Header eingefügt wurden, solltest Du sicherstellen, dass sie richtig funktionieren. Du kannst dies tun, indem Du Deine Website mit einem Browser aufrufst und die Header im DevTools-Netzwerk-Tab überprüfst. Natürlich kannst Du mit dem Website-Radar Hosting Scanner die Header Deiner Website überprüfen.
Schließlich solltest Du Deine Website regelmäßig überprüfen und die Header aktuell halten. Sicherheitsbedrohungen und Browser-Updates können dazu führen, dass bestimmte Header nicht mehr wirksam sind. Es ist wichtig, die neuesten Empfehlungen zu HTTP-Security Header zu verfolgen und sicherzustellen, dass die Header, die Du verwendest, immer auf dem neuesten Stand sind. Mittels Website Monitoring kannst Du auch die Header regelmäßig überprüfen lassen, um sicherzustellen, dass sie immer noch funktionell sind.
Beachte: Die Implementierung von HTTP-Security Header nur ein Teil einer umfassenden Sicherheitsstrategie ist. Es ist ebenso wichtig, die allgemeine Sicherheit Deiner Website durch Maßnahmen wie regelmäßige Updates, sichere Passwörter und das Vermeiden von bekannten Schwachstellen zu verbessern.
Wie man HTTP-Security Header in einer Website einrichtet
Über die .htaccess Datei
In der .htaccess Datei auf Deinem Server kannst Du relativ einfach die HTTP-Security Header steuern. Füge einfach folgenden Vorschlag in die .htaccess Datei auf Deinem Server ein:
<IfModule mod_headers.c>
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options "nosniff"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header set Referrer-Policy "no-referrer"
Header always set Permissions-Policy "accelerometer=(),autoplay=(),camera=(),display-capture=(),encrypted-media=(),fullscreen=(),gamepad=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),midi=(),payment=(),picture-in-picture=(),publickey-credentials-get=(),sync-xhr=(self),usb=(),screen-wake-lock=(),web-share=(),xr-spatial-tracking=()"
</IfModule>
Über die Apache vhost Konfiguration
Wenn Du die .htaccess Datei nicht verwenden willst, kannst Du die HTTP-Security Header auch in Deiner Apache vhost Konfiguration setzen:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName ...
ServerAdmin ...
DocumentRoot ...
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options "sameorigin"
Header always set X-Xss-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy: no-referrer
Header always set Referrer-Policy "strict-origin"
Header always set Permissions-Policy "accelerometer=(),autoplay=(),camera=(),display-capture=(),encrypted-media=(),fullscreen=(),gamepad=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),midi=(),payment=(),picture-in-picture=(),publickey-credentials-get=(),sync-xhr=(self),usb=(),screen-wake-lock=(),web-share=(),xr-spatial-tracking=()"
# die CSP ist nicht einfach zu erstellen. Zuerst sollten die anderen Header passen
# Header always set Content-Security-Policy "default-src 'self';font-src *;img-src * data:; script-src *; style-src *;"
... und hier kommen die anderen Apache spezifischen Direktiven ...
</VirtualHost>
</IfModule>
nginx Direktiven
Die Anweisungen für Nginx sind denen der Apache Konfiguration sehr ähnlich. Hier die Gegenüberstellung der Syntax:
# Beispielcode Apache
Header always set X-Content-Type-Options "nosniff"
# Beispielcode Nginx
add_header X-Content-Type-Options nosniff;
Über das WordPress Child Theme
Du kannst auch über functions.php oder besser über Dein WordPress Child Theme die HTTP-Security Header setzen:
if (!empty($_SERVER['HTTPS'])) {
function aal_add_security_headers($headers) {
$headers["strict-transport-security"] = "max-age=63072000; includeSubDomains";
$headers["x-frame-options"] = "sameorigin";
$headers["x-xss-protection"] = "1; mode=block";
$headers["x-content-type-options"] = "nosniff";
$headers["referrer-policy"] = "no-referrer";
// weitere Header entsprechend setzen.
return $headers;
}
add_filter('wp_headers', 'aal_add_security_headers');
}
Testen, Testen, Testen
Durch die Verwendung von HTTP-Security Headern kann es vorkommen, dass bestimmte Funktionen auf Deiner Website eingeschränkt werden und diese dadurch nicht mehr korrekt angezeigt wird. Daher ist es wichtig, nach der Neukonfiguration Deiner Website immer alle Seiten sorgfältig mit einem Webbrowser zu überprüfen und die Konfiguration der Header entsprechend anzupassen.
- Visuell/Manuell: Die Website durchklicken und ansehen.
- Console aus den Entwicklertools: Right-Click auf die Website. Dann „Untersuchen“ auswählen. Dann auf die „Console“ gehen und checken, ob keine Fehler auftreten.
- Website-Radar: Mit dem Website-Radar Hosting Check kannst Du die Anwesenheit der Security Header überprüfen.
Tools und Ressourcen zur Hilfe bei der Implementierung
Dieser Blogartikel sollte Dir mehr als nur einen Überblick geben. Wenn Du Anmerkungen hast, Dir etwas fehlt oder etwas nicht korrekt erscheint, bitte melde Dich über unser Support-Formular.
Verwende unseren Hosting Scanner um die HTTP-Security Header Deiner Website zu überprüfen.
OWASP – Das Open Web Application Security Project® (OWASP) ist eine gemeinnützige Stiftung, die sich dafür einsetzt, die Sicherheit von Software zu verbessern. Unter anderem machen sie Vorschläge für die HTTP-Security Header
MDN web docs – HTTP headers – Security – Entwickler Ressourcen für die HTTP-Security Header.
Fazit
Schütze Deine Website und die Daten Deiner Benutzer, indem Du die wichtigen HTTP-Security-Header implementierst. Durch die Verwendung von HTTP-Security-Headern, kannst Du Angriffe wie Cross-Site-Scripting, Injection-Attacken und Man-in-the-Middle-Angriffe verhindern. Fang jetzt an, Deine Website sicherer zu machen und Deine Benutzer zu schützen. Und vergiss nicht, die Nutzung der Header mittels unserem Website-Radar Website Monitoring auch regelmäßig zu überwachen.