Security Headers in WordPress: Umsetzung mit Nginx und .htaccess & Plesk für ein A+ Sicherheitsrating

Security Headers – klingt erstmal kompliziert, oder? Aber keine Sorge, ist gar nicht so wild. Kurz gesagt sind Security Headers kleine Helfer, die deine WordPress-Website sicherer machen. Sie schützen vor Angriffen und sorgen dafür, dass deine Seite optimal funktioniert. Mit der richtigen Konfiguration kannst du sogar ein A+ Sicherheitsrating erreichen – und das Beste: Dafür brauchst du nicht mal Plugins! Hier erfährst du, wie du das in wenigen Schritten mit Nginx, Plesk und .htaccess umsetzen kannst.

Inhalt

Was sind Security Headers?

Stell dir Security Headers als zusätzliche Sicherheitsmaßnahme vor, die verhindern, dass böse Überraschungen auf deiner Website passieren. Sie werden über HTTP an den Browser gesendet und geben diesem Anweisungen, wie er mit Inhalten umgehen soll.

Ein paar wichtige Security Headers:

  • Content Security Policy (CSP): Kontrolliert, welche Inhalte geladen werden dürfen.
  • X-Content-Type-Options: Verhindert das Sniffing von MIME-Types.
  • Strict-Transport-Security (HSTS): Erzwingt HTTPS-Verbindungen.
  • X-Frame-Options: Stoppt Clickjacking-Angriffe.

Jeder Header hat seine eigene Aufgabe und schützt deine Seite vor bestimmten Bedrohungen. Wenn du sie richtig konfigurierst, machst du deine Seite sicherer und bekommst dazu noch ein schickes A+ Rating bei Sicherheitstests.

Warum WordPress-Seiten absichern?

WordPress ist das beliebteste CMS da draußen. Leider macht das die Plattform auch zum beliebten Angriffsziel für Hacker. Oft wird die Sicherheit auf die leichte Schulter genommen, und genau hier kommen Security Headers ins Spiel. Sie schützen vor Angriffen wie:

  • Clickjacking: Wenn jemand versucht, deine Seite in einem unsichtbaren Frame einzubetten und Nutzer dazu bringt, unbeabsichtigt auf etwas zu klicken.
  • MIME-Type Sniffing: Der Browser versucht, herauszufinden, welchen Inhalt eine Datei hat, was zu Sicherheitsproblemen führen kann.

Sicherheits-Check für ein A+ Rating

Ein A+ Rating ist quasi der „Goldstandard“ in Sachen Website-Sicherheit. Tools wie securityheaders.com bewerten die Header-Konfiguration deiner Seite und geben dir eine Punktzahl. Ein paar Dinge, die dein Rating beeinflussen können:

  • Fehlende oder falsch konfigurierte Security Headers.
  • Keine HTTPS-Verbindungen (HSTS fehlt).
  • Ungültige Content Security Policies.

Wenn du also ein A+ Rating willst, solltest du die Header richtig setzen. Hier erfährst du, wie das geht!

Vorbereitung zur Umsetzung der Security Headers

Bevor es losgeht, brauchst du ein bisschen Grundwissen zu Servern:

  • Apache (mit .htaccess): Hier werden die Header in der .htaccess-Datei gesetzt, die du im Root-Verzeichnis deiner WordPress-Seite findest.
  • Nginx: Hier läuft alles über eine Konfigurationsdatei (z.B. nginx.conf), oder du nutzt Plesk als Admin-Oberfläche, um die Einstellungen einfach vorzunehmen.

Security Headers in WordPress mit .htaccess umsetzen

Die .htaccess-Datei ist dein Freund, wenn du Apache verwendest. Hier ein paar Code-Beispiele, die du in diese Datei einfügen kannst:


# Headers Security 

<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; includeSubDomains; preload"
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-Permitted-Cross-Domain-Policies "none"
</IfModule>
# END Headers Security
    

Speichere die Datei und lade deine Website neu, um die Änderungen zu aktivieren. Ein kurzer Test mit securityheaders.com zeigt dir, ob alles geklappt hat.

Security Headers in Nginx mit Plesk konfigurieren

Wenn du Nginx verwendest und Plesk als Admin-Panel hast, kannst du die Header bequem über die Oberfläche setzen:

  1. Melde dich bei Plesk an.
  2. Wähle die Domain, die du bearbeiten möchtest.
  3. Gehe zu Web Server Settings oder Apache & Nginx-Einstellungen.
  4. Füge im Nginx-Bereich die gewünschten Header ein, zum Beispiel:

# Access-Control Einstellungen (CORS)
add_header Access-Control-Allow-Methods "GET, POST";
add_header Access-Control-Allow-Headers "Content-Type, Authorization";

# Content-Security-Policy (CSP)
add_header Content-Security-Policy "upgrade-insecure-requests;";

# Cross-Origin Embedder Policy (COEP)
add_header Cross-Origin-Embedder-Policy "unsafe-none; report-to='default'";
add_header Cross-Origin-Embedder-Policy-Report-Only "unsafe-none; report-to='default'";

# Cross-Origin Opener Policy (COOP)
add_header Cross-Origin-Opener-Policy "unsafe-none";
add_header Cross-Origin-Opener-Policy-Report-Only "unsafe-none; report-to='default'";

# Cross-Origin Resource Policy (CORP)
add_header Cross-Origin-Resource-Policy "cross-origin";

# Permissions Policy
add_header 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=()";

# Referrer Policy
add_header Referrer-Policy "strict-origin-when-cross-origin";

# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

# X-Content-Security-Policy (Legacy CSP)
add_header X-Content-Security-Policy "default-src 'self'; img-src *; media-src * data:;";

# X-Content-Type-Options
add_header X-Content-Type-Options "nosniff";

# X-Frame-Options
add_header X-Frame-Options "SAMEORIGIN";

# X-Permitted-Cross-Domain-Policies
add_header X-Permitted-Cross-Domain-Policies "none";
    
  1. Speichern und testen ein Server Neustart ist in der Regel nicht notwendig da bei dem Speichern Plesk den Dienst Nginx neu startet.

Security Headers direkt in der Nginx-Konfiguration (ohne Plesk)

Kein Plesk? Kein Problem. Du kannst die Header auch direkt in der Nginx-Konfigurationsdatei setzen:


server {
  # Access-Control Einstellungen (CORS)
add_header Access-Control-Allow-Methods "GET, POST";
add_header Access-Control-Allow-Headers "Content-Type, Authorization";

# Content-Security-Policy (CSP)
add_header Content-Security-Policy "upgrade-insecure-requests;";

# Cross-Origin Embedder Policy (COEP)
add_header Cross-Origin-Embedder-Policy "unsafe-none; report-to='default'";
add_header Cross-Origin-Embedder-Policy-Report-Only "unsafe-none; report-to='default'";

# Cross-Origin Opener Policy (COOP)
add_header Cross-Origin-Opener-Policy "unsafe-none";
add_header Cross-Origin-Opener-Policy-Report-Only "unsafe-none; report-to='default'";

# Cross-Origin Resource Policy (CORP)
add_header Cross-Origin-Resource-Policy "cross-origin";

# Permissions Policy
add_header 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=()";

# Referrer Policy
add_header Referrer-Policy "strict-origin-when-cross-origin";

# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

# X-Content-Security-Policy (Legacy CSP)
add_header X-Content-Security-Policy "default-src 'self'; img-src *; media-src * data:;";

# X-Content-Type-Options
add_header X-Content-Type-Options "nosniff";

# X-Frame-Options
add_header X-Frame-Options "SAMEORIGIN";

# X-Permitted-Cross-Domain-Policies
add_header X-Permitted-Cross-Domain-Policies "none";
}
    

Nach den Änderungen musst du den Nginx-Server neu laden, damit die Einstellungen greifen:

sudo service nginx reload

Umsetzung der Security Headers in WordPress ohne Plugins

Viele setzen auf Plugins, um die Header zu konfigurieren – aber warum die Seite mit einem weiteren Plugin belasten? Die manuelle Konfiguration über .htaccess oder Nginx ist oft besser und du hast mehr Kontrolle über die Einstellungen.

Wie überprüfe ich das A+ Rating?

Nutze Tools wie securityheaders.com, um zu sehen, wie gut deine Seite abgesichert ist. Wenn das Rating nicht A+ ist, überprüfe deine Einstellungen und setze fehlende Header.

Praktische Tipps für bessere Security Headers

  • Überprüfe regelmäßig deine Header-Konfiguration.
  • Halte dich über neue Sicherheitsstandards auf dem Laufenden.
  • Füge Header nur dann hinzu, wenn sie wirklich notwendig sind.

Troubleshooting: Häufige Fehler und Lösungen

Du hast alles eingerichtet, aber es funktioniert nicht? Ein paar Dinge, die du überprüfen solltest:

  • Fehlende Header: Hast du alle notwendigen Header hinzugefügt?
  • Syntaxfehler: Die Header müssen genau richtig formatiert sein.
  • Caching: Manchmal verhindert Caching, dass Änderungen sofort sichtbar sind.

Im Zweifel: Caching leeren und Konfiguration nochmal prüfen.

Wie beeinflussen Security Headers die Website-Performance?

Security Headers haben normalerweise keinen großen Einfluss auf die Ladezeiten. Im Gegenteil – sie können sogar die Performance optimieren, indem sie das Verhalten des Browsers besser steuern.

Fazit: Sicheres A+ Rating ohne Plugins

Security Headers manuell einzurichten ist nicht schwer und bringt viele Vorteile. Du machst deine WordPress-Seite sicherer und bekommst ein schickes A+ Rating – ohne Plugins und komplizierte Einstellungen. Einfach .htaccess oder Nginx anpassen, testen und fertig!