WordPress-Tipp: Verbesserter Schutz vor Hackerangriffen mit HTTP-Sichereitsheader — Plugin Headers Security Advanced & HSTS WP

HTTP-Sicherheitsheader (oder einfach «Security Header» ist ein Überbegriff für Sicherheitsmassnahmen, die dem Webserver deiner Website ermöglichen, einige Sicherheitsbedrohungen bzw. Attacken (ja, auch in der Schweiz vermehrt) von deiner Website fernzuhalten, bevor sie den Betrieb und die Datensicherheit deiner Website beeinträchtigen können.

Es gibt viel Dokumentation über die einzelnen Einstellungen, die man in der .htaccess-Datei (Mehr dazu unter: https://de.wikipedia.org/wiki/.htaccess) eines üblichen Webservers, z.B. Apache, vornehmen kann. In WordPress schreiben beispielsweise Caching-Plugins regelmässig Instruktionen in die .htaccess-Datei.

Bevor wir das im Titel erwähnte Plugin betrachten, und auch vertieft technische Aspekte (mit relevanten Links), testen wir eine bekannte Medien-Website in der Schweiz, wie sie HTTP-Sicherheitsheader implementiert hat.

Eine bekannte Site, um Security Headers zu scannen, ist securityheaders.com von Probely:

https://securityheaders.com/

Nach Eingabe der Web-Adresse der Mediensite (die wir verständlicherweise nicht nennen wollen, da wir kein Interesse haben, sie mit diesem Test zu brüskieren) erscheint dieses Resultat:

Die Notengebung basiert auf dem typischen USA-System von höchst A+ bis ganz runter F (failed).

Als Vergleich das Scan-Resultat für arteeo.ch:

Security Header auf Testsite einrichten mit Plugin «Headers Security Advanced & HSTS WP»

Zuerst ein Scan der Testsite, bevor wir das Plugin installieren. Hier das ernüchternde Ergebnis:

Glücklicherweise ist das keine öffentliche Site, sondern sie besteht nur für Testzwecke. Beginnen wir mit der Installation des Plugins Headers Security Advanced & HSTS WP, das im offiziellen WordPress-Verzeichnis steht:

Das Plugin hat bereits Voreinstellungen getroffen, wie man hier auf der Seite mit allen Einstellungen sieht (es sind nur die obersten Einstellungen im Bild sichtbar):

Wir klicken Save Changes und schauen uns mal zuerst das Resultat im erneuten Scan an:

Perfekt! Aber was ist jetzt genau in der .htaccess-Datei drin? Schauen wir doch mal nach. Wir öffnen die Datei (ist immer im obersten Verzeichnis der Website):

# BEGIN Headers Security Advanced & HSTS WP 5.0.28
<IfModule mod_headers.c>
Header set Access-Control-Allow-Methods "GET,POST"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"
Header set Content-Security-Policy "upgrade-insecure-requests;"
Header set Cross-Origin-Embedder-Policy "unsafe-none; report-to='default'"
Header set Cross-Origin-Embedder-Policy-Report-Only "unsafe-none; report-to='default'"
Header set Cross-Origin-Opener-Policy "unsafe-none"
Header set Cross-Origin-Opener-Policy-Report-Only "unsafe-none; report-to='default'"
Header set Cross-Origin-Resource-Policy "cross-origin"
Header set Permissions-Policy "accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), display-capture=(self), encrypted-media=(), fullscreen=*, geolocation=(self), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=*, picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), xr-spatial-tracking=(), gamepad=(), serial=()"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Strict-Transport-Security "max-age=63072000"
Header set X-Content-Security-Policy "default-src 'self'; img-src *; media-src * data:;"
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
Header set X-Permitted-Cross-Domain-Policies "none"
</IfModule>
# END Headers Security Advanced & HSTS WP

Wir sehen hier HSTS:

Header set Strict-Transport-Security "max-age=63072000"

Gemäss der Developer Mozilla Docs sieht das gut aus:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security.

Weiter betrachten wir diese Zeile:

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

X-XSS-Protection bietet Schutz vor gewissen XSS(Cross Site Scripting)-Angriffen:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection

Und eine weitere Zeile:

Header set Referrer-Policy "strict-origin-when-cross-origin"

Die Docs beschreiben das hier:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy

Die Einstellung ist voreingestellt. Es ist möglich, dass man hier in Bezug auf das Datengesetz noch was ändern könnte.

Die nächste Zeile, die wir anschauen, blockiert das Einbinden deiner Site auf fremden Sites:

Header set X-Frame-Options "SAMEORIGIN"

Diverse HTML-Elemente wie <frame>, <iframe> aber auch <embed> werden vom Browser nicht wiedergegeben. Die Docs dazu:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

Das verhindet sogenanntes Clickjacking. Link dazu gibts in der Doc oben.

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

Hier geht es um MIME-types, also dass der Browser, nicht selber den MIME-type einer Datei – z.B. bei einem Upload – bestimmen. Sollte voreingestellt immer auf nosniff stehen:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options

Eine weitere Zeile ist:

Header set X-Content-Security-Policy "default-src 'self'; img-src *; media-src * data:;"

Mehr Infos dazu gibt es hier: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP.

Ist ein komplexes Thema, bei dem man sicher noch mehr Punkte einfügen könnte. In dieser voreingestellten Form funktioniert es bereits gut.

Es sind noch weitere coole Einstellungen wie Cross-Origin-Embedder-Policy in der Datei, die sicher mit voreingestellten Werten gut arbeiten.

Fazit: Voreingestellte Werte für Security Header in .htaccess sind gut gewählt. Verbesserungen möglich

Wir sind zufrieden mit den Einstellungen, würden aber möglicherweise für ein Kundenprojekt noch Feineinstellungen vornehmen. Ein weiteres Plugin, das uns gefällt und vertieft Einstellungen ermöglicht ohne direkten Eingriff ins .htaccess lautet:

Security Header Generator (https://wordpress.org/plugins/security-header-generator/)

Wir werden versuchen, in einem Followup-Beitrag dieses Plugin genauer vorzustellen.

Hat dir der Beitrag gefallen?

Hinterlassen Sie einen Kommentar