Seien es die Angreifbarkeit älterer TLS(SSL)-Protokolle, die Abhör- und Ausspähskandale der letzten Monate oder einfach nur die permanente Gefahr eines Angriffs auf die Webseite unter Ausnutzung von Sicherheitslücken in der eingesetzten Software.
Alle diese Dinge bereiten sicher so manchem Webmaster oder Seitenbetrieber Kopfzerbrechen. Dass es die absolute Sicherheit nicht geben kann, ist wohl jedem klar, aber es gibt zahlreiche Punkte und Konfigurationsmöglichkeiten, um eine Webseite ein klein wenig sicherer zu machen.
Das Ziel sollte es aber dennoch sein, Angriffe möglichst „teuer“ zu machen. Dies bedeutet, je mehr Ressourcen (Zeit, Know-How, Hardware, Software-Tools etc.) es erfordert, um eine Lücke zu finden oder auszunutzen, umso geringer wird die Wahrscheinlichkeit einer erfolgreichen Attacke.
Daher habe ich mal wieder ein paar Punkte gesammelt, die zudem relativ leicht auch für Laien umzusetzen sind. Gerade auch im Hinblick auf Seitenbetreiber die beispielsweise selbst keinen Zugriff auf die Konfiguration Ihres Webservers (z.B. Apache) haben. Darunter fallen schon einmal alle Anwender ohne eigenen Server.
Es handelt sich um Headereinträge, die wir per .htaccess setzen und an die Browser übermitteln. Alle nachfolgend beschriebenen Einträge gelten für den Apache Webserver und benötigen das Apache Module „mod_headers„. Ebenfalls können diese nicht nur per .htaccess, sondern auch in der Server-Config bzw. den Einträgen zu einzelnen Virtual-Hosts hinterlegt werden. Es existieren natürlich noch mehr Einträge und Prüfungen, die man setzen kann und die Beispiele haben keinen Anspruch auf Vollständigkeit.
Es existiert von mir dazu ein aktuellerer Beitrag zu diesem Thema aus 2020, der diese und noch mehr Einträge beschreibt: „10 Apache Header Einträge die Ihre Webseite sicherer machen“
HTTP Strict Transport Security (HSTS)
Mittels dieses Header-Eintrags informiert der Webserver, der HSTS unterstützen muss, den anfragenden Browser beim ersten Kontakt via HTTP/HTTPS darüber, dass alle Verbindungen zur Website künftig per SSL/TLS verschlüsselt werden sollen. Allerdings erfolgt keine automatische Umleitung von http auf https. Auch kann dadurch der erste Verbindungsaufbau zur Webseite allerdings weiterhin per http erfolgen. Dieser Headereintrag macht natürlich nur Sinn, wenn Ihr ein SSL-Zertifikat einsetzt. Ein Beispielcode, die Angaben beginnend mit der Raute sind nur Kommentare und werden beim abarbeiten der .htaccess nicht ausgewertet:
# HTTP Strict Transport Security (HSTS) aktivieren
# Pflichtangabe: „max-age“
# Optional: „includeSubDomains“
Header set Strict-Transport-Security „max-age=31556926; includeSubDomains“
Bedeutung: Verbiete alle unsicheren Verbindungen für die nächsten 365 Tage zu meiner Domain, mit oder ohne Subdomains.
X-Content-Type-Options
Es existiert nur ein definierbarer Wert „nosniff“, der verhindert, dass Internet Explorer und Google Chrome unabhängig vom deklarierten Content-Type (z.B. text/html) nach weiteren möglichen MIME-Types suchen. Für Chrome gilt dies auch für das Herunterladen von Erweiterungen. Der Headereintrag reduziert die Belastung durch sog. Drive-by-Download-Attacken und Webseiten, die den Upload von Dateien unterstützen, die, wenn deren Namen geschickte gewählt wurden, vom Browser als ausführbare Datei oder dynamische HTML-Datei behandelt werden und damit euren Rechner oder andere mit Schadcode infizieren.
# Verhindert mime based attacks, nur IE und Chrome
Header set X-Content-Type-Options „nosniff“
X-XSS-Protection
Dieser Header aktiviert die in den meisten aktuellen Browsern eingebauten Cross-Site-Scripting (XSS)-Filter. Zwar sind diese standardmäßig aktiviert, daher ist dieser Header nur dazu da, den Filter für eure Seite wieder zu aktivieren, falls der Benutzer ihn abgeschaltet hat. Zudem wird er erst/nur ab dem IE 8 und in Chrome unterstützt.
# Aktiviert XSS Praeventions-/Filter-Tools, nur IE und Chrome
Header set X-XSS-Protection „1; mode=block“
X-Frame-Options
Ob einem Browser erlaubt wird, eine Seite in einem frame oder iframe darzustellen, legt dieser Headereintrag fest. Damit können sog. Clickjacking-Attacken vermieden werde, indem sichergestellt wird, dass eure Webseite nicht in eine anderen Webseite eingebettet wird. Es gibt verschiedene Werte:
DENY: Kein Rendeeing der Seite, wenn Sie in einem frame oder iframe geladen wird
SAMEORIGIN: Rendering der Seite erfolgt nur, wenn der frame oder iframe innerhalb eurer Domain ist
ALLOW-FROM DOMAIN: Verhindert, dass die Seite dargestellt werden kann, wenn es sich um eine andere Domain handelt, als die hier angegebene
# Verhindert Clickjacking, Begrenzung der frame/iframe Darstellung
Header append X-Frame-Options „SAMEORIGIN“
Zusammenfassung:
Zusammengefasst ein Beispielcode der oben genannten Zeilen für eure .htaccess für den Apache Webserver. Es wird zusätzlich geprüft, ob mod_headers.c zur Verfügung steht und Header-Einträge überhaupt gesetzt/übermittelt werden können:
## Mod Headers – Security
<IfModule mod_headers.c>
# HTTP Strict Transport Security (HSTS) aktivieren
Header set Strict-Transport-Security „max-age=31556926, includeSubDomains“
# Avoid Clickjacking, Seite darf nur in frame oder iframe geöffnet werden auf eigener Domain
Header append X-Frame-Options „SAMEORIGIN“
# Turn on XSS prevention tools, activated by default in IE and Chrome
Header set X-XSS-Protection „1; mode=block“
# prevent mime based attacks like drive-by download attacks, IE and Chrome
Header set X-Content-Type-Options „nosniff“
</IfModule>
Ihr könnt prüfen, welche Header eure Webseite an den Browser übermittelt. Für alle, die nicht wissen wie, geht das natürlich auch über einen Dienst online wie z.B. http://pgl.yoyo.org/http/browser-headers.php
Tragt dort einfach eure Domain ein und ihr seht, ob und welche Werte jeweils übermittelt werden: Strict-Transport-Security , X-Frame-Options, Content-Type-Options, X-XSS-Protection
Schreibe einen Kommentar