Sicherheitsheader für WordPress: Die richtige Reihenfolge zählt

Setzen Sie zuerst HSTS, X-Content-Type-Options und Referrer-Policy auf Serverebene, und zwar erst nachdem HTTPS sauber läuft. Die Content-Security-Policy kommt danach, zunächst im Report-Only-Modus, damit Sie Fehler sehen, bevor sie live blockieren. .htaccess, vHost oder nginx-Konfiguration sind die robustere Ebene gegenüber Plugins oder functions.php. Ein Preload-Eintrag für HSTS folgt erst ganz am Ende, wenn wirklich alles geprüft ist.


Kurz gesagt:

  • Für eine sichere Konfiguration sollten HSTS, X-Content-Type-Options und Referrer-Policy erst nach stabilen HTTPS-Verbindungen auf Serverebene gesetzt werden.
  • Die Content-Security-Policy ist komplex, aber der wichtigste Schutz gegen Cross-Site-Scripting, sollte daher im Report-Only-Modus getestet werden, bevor sie live geschaltet wird.
  • Serverseitige Header setzen ist zuverlässiger als Plugins oder functions.php, wobei bei Apache und nginx spezielle Hinweise für die korrekte Implementierung zu beachten sind.
  • Eine Preload-Anfrage für HSTS sollte erst nach vollständiger Prüfung und validation aller Subdomains und Zertifikate erfolgen, da sie nur schwer rückgängig gemacht werden kann.
  • Regelmäßige Tests der Header-Antkommen mit Tools wie securityheaders.com oder Mozilla Observatory sind notwendig, um tatsächliche Sicherheit auf der Website zu gewährleisten.

Werbeeinfach
WordPress-Sicherheit professionell absichern
Werbeeinfach entwickelt, betreut und optimiert sichere WordPress-Lösungen, inklusive technischer Sicherheit und langfristigem Support.

WordPress-Lösung ansehen

Inhaltsverzeichnis

Was sind Sicherheitsheader in WordPress und wozu dienen sie?

HTTP-Sicherheitsheader sind Anweisungen, die Ihr Server bei jeder Antwort an den Browser mitschickt. Sie sagen dem Browser, wie er mit Inhalten umgehen soll und erschweren damit Angriffe wie Cross-Site-Scripting, Clickjacking und MIME-Snarfing erheblich. Für eine WordPress-Seite mit Kontaktformularen, Login-Bereich oder WooCommerce-Checkout ist das keine Kür, sondern eine Grundabsicherung, die neben Passwortschutz und Updates dazugehört.

Die folgenden Header bilden das Fundament. web.dev empfiehlt genau diese Kombination als Basisausstattung für Websites mit sensiblen Daten:

  • Content-Security-Policy (CSP): Legt fest, von welchen Quellen Skripte, Styles und Bilder geladen werden dürfen. Der wirksamste Schutz gegen Cross-Site-Scripting, aber auch der komplexeste einzuführen. Beispiel-Direktive: default-src 'self'; script-src 'self' 'nonce-xyz123'.
  • HTTP Strict-Transport-Security (HSTS): Zwingt Browser, Ihre Domain nur noch über HTTPS aufzurufen, selbst wenn jemand versehentlich http:// eingibt. Beispiel: Strict-Transport-Security: max-age=eine angemessene Zeitspanne, inklusive Subdomains.
  • X-Content-Type-Options: Verhindert, dass der Browser Dateitypen errät und dadurch schädlichen Code als harmlos einstuft. Nur eine Direktive existiert: X-Content-Type-Options: nosniff.
  • Referrer-Policy: Steuert, wie viel von Ihrer URL an externe Ziele weitergegeben wird, wenn Nutzer einen Link anklicken. Empfehlenswert: Referrer-Policy: strict-origin-when-cross-origin.
  • Permissions-Policy (früher Feature-Policy): Schaltet Browser-Funktionen wie Kamera, Mikrofon oder Standortabfrage gezielt ab, wenn Ihre Seite sie nicht braucht. Beispiel: Permissions-Policy: camera=(), microphone=().
  • Cross-Origin-Opener-Policy, Cross-Origin-Embedder-Policy, Cross-Origin-Resource-Policy (COOP/COEP/CORP): Isolieren Ihre Seite von fremden Browser-Kontexten und verhindern bestimmte Seitenkanalangriffe.
  • X-Frame-Options / frame-ancestors: Verhindert, dass Ihre Seite in einem fremden iframe eingebettet und für Klickbetrug missbraucht wird. frame-ancestors 'self' in der CSP übernimmt diese Aufgabe inzwischen moderner als der alte X-Frame-Options-Header.

X-Frame-Options gilt als veraltet, funktioniert aber noch in älteren Browsern. Setzen Sie deshalb beides parallel: frame-ancestors in der CSP für moderne Browser, X-Frame-Options: SAMEORIGIN als Rückfallebene.

Header in WordPress setzen: Server, .htaccess, functions.php oder Plugin?

Vier Wege führen zum Ziel, aber sie unterscheiden sich stark in Zuverlässigkeit und Reichweite. Die Server-Level-Konfiguration über vHost-Datei oder Angina-Serverblock deckt jede Antwort ab, die Ihr Server ausliefert, also HTML-Seiten genauso wie Bilder, CSS-Dateien und Redirects. PHP- oder Plugin-Lösungen erreichen dagegen nur PHP-gerenderte Antworten und lassen statische Assets oft ungeschützt.

Header in WordPress setzen: Server, .htaccess, functions.php oder Plugin? — overview diagram

Wenn Sie Root- oder vHost-Zugriff haben, ist das die erste Wahl. .htaccess ist die zweitbeste Option, sinnvoll, wenn Ihr Hoster keinen vHost-Zugang gewährt. functions.php ist die dritte Option, brauchbar als Übergangslösung, aber mit Lücken. Plugins sind der letzte Ausweg, wenn keine der anderen Optionen offensteht.

Schrittweises Vorgehen für die Serverebene

  1. Prüfen Sie, ob mod_headers bei Apache aktiv ist. Ohne dieses Modul greift kein HeaderBefehl. Ein kurzer Test mit apachectl -M | grep headers zeigt es Ihnen.
  2. Nutzen Sie immer Header always set statt nur Header set. Ohne das Schlüsselwort „always“ fehlen Header bei Fehlerseiten (404, 500) und bei Redirects, genau den Antworten, die Angreifer gern zuerst testen.
  3. Prüfen Sie AllowOverride in der vHost-Konfiguration. Steht dort AllowOverride None, greifen Ihre .htaccess-Regeln überhaupt nicht, egal wie korrekt sie geschrieben sind. Das ist einer der häufigsten Gründe, warum Header „einfach nicht ankommen“.
  4. Platzieren Sie eigene Regeln außerhalb des WordPress-Blocks. Alles zwischen # BEGIN WordPress und # END WordPress wird bei jedem Permalink-Speichern von WordPress überschrieben. Ihre Header-Regeln gehören davor oder danach.
  5. Testen Sie nach jeder Änderung sofort. Ein einziger Tippfehler in der .htaccess kann die gesamte Seite mit einem 500er-Fehler lahmlegen.

Bei nginx übernimmt add_header ... always dieselbe Funktion wie das Apache-Pendant. Wichtig ist hier ein Detail, das viele übersehen: Ein add_header innerhalb eines location-Blocks kann sämtliche Header aus dem übergeordneten server-Block unterlaufen, weil nginx die Vererbung stoppt, sobald in einem Block überhaupt ein add_header auftaucht. Die Lösung: entweder alle Header-Anweisungen in jedem location-Block wiederholen oder eine gemeinsame Include-Datei einbinden.

functions.php mit dem send_headers-Hook ist praktikabel, wenn kein Serverzugriff besteht:

add_action('send_headers', function() {
    header('X-Content-Type-Options: nosniff');
    header('Referrer-Policy: strict-origin-when-cross-origin');
});

Diese Methode greift nur bei Anfragen, die tatsächlich durch PHP laufen. Bilder, CSS- und JS-Dateien, die direkt vom Webserver ausgeliefert werden, bekommen diese Header nicht. Das ist die typische Lücke, die Tester dann bei einem Audit als fehlend markieren.

Plugins wie das kostenlose Security Header bieten eine Oberfläche, über die auch technisch weniger versierte Betreiber Header setzen und den Report-Only-Modus für CSP aktivieren können. Nützlich, wenn kein Serverzugang existiert, aber mit eigenen Risiken: In Multisite-Umgebungen kann ein Plugin Header pro Subseite unterschiedlich setzen und für Verwirrung sorgen, und wenn parallel schon serverseitige Regeln existieren, entstehen doppelte Header.

Profi-Tipp: Setzen Sie einen Header niemals doppelt. Ein Server-Header plus ein Plugin-Header für dieselbe Direktive führt bei CSP zum sogenannten Intersection-Effekt: Der Browser wendet nur die strengste gemeinsame Schnittmenge beider Regeln an, was oft Skripte blockiert, die eigentlich erlaubt sein sollten.

Die operative Reihenfolge beim Rollout bleibt immer gleich: erst das SSL-Zertifikat einrichten, dann den HTTPS-Redirect erzwingen, danach HSTS mit niedrigem max-age-Wert aktivieren, und erst zum Schluss dauerhaftes Monitoring aufsetzen. Wer diese Reihenfolge umdreht und HSTS vor einem stabilen HTTPS-Redirect setzt, riskiert, dass Besucher bei einem Zertifikatsfehler komplett ausgesperrt werden.

CSP einführen, ohne die Website zu brechen

Eine Content-Security-Policy scharf zu schalten, ohne vorher zu testen, ist der sicherste Weg, den WooCommerce-Checkout oder eingebettete Google-Maps-Karten lahmzulegen. Der richtige Einstieg heißt deshalb Content-Security-Policy-Report-Only statt der scharfen Variante. Der Browser meldet dann jede Verletzung, blockiert aber nichts.

  • Konfigurieren Sie report-to oder das ältere report-uri, damit Verstöße an einen Endpunkt gemeldet werden, den Sie auswerten können.
  • Sammeln Sie mindestens ein bis zwei Wochen Daten, idealerweise über einen kompletten Bestellzyklus im Shop hinweg.
  • Prüfen Sie jede gemeldete Domain: Zahlungsanbieter, Tracking-Skripte, eingebettete Videos, Google Fonts. Jede davon braucht einen Eintrag in Ihrer script-src oder frame-src.
  • Testen Sie den Checkout-Prozess komplett auf einer Staging-Umgebung, bevor Sie die Policy live erzwingen.

MDN weist ausdrücklich darauf hin, dass zwei gleichzeitig aktive CSP-Header, etwa einer vom Server und einer von einem Plugin, sich nicht ergänzen, sondern überschneiden. Der Browser wendet dann nur die Schnittmenge beider Regelsätze an, was erlaubte Skripte blockiert, ohne dass eine Fehlermeldung im Frontend auf die Ursache hinweist.

Für dynamisch generierte Inline-Skripte, etwa von manchen Page-Buildern, sind Nonces die sauberere Lösung gegenüber pauschalem unsafe-inline. Ein Nonce ist ein einmaliger Zufallswert, der bei jeder Anfrage neu generiert wird und im Skript-Tag sowie im Header übereinstimmen muss. Genau hier liegt eine Falle für Caching-Plugins: Wird eine Seite mit eingebettetem Nonce als statische Datei gecacht und an mehrere Besucher ausgeliefert, funktioniert der Nonce nicht mehr korrekt. Antworten mit Nonce brauchen deshalb Cache-Control: private, damit kein gemeinsamer Cache oder CDN sie weiterverteilt.

HSTS sicher einführen und die Preload-Frage klären

HSTS ist mächtig, aber auch das Element mit dem größten Nachholeffekt bei einem Fehler. Ein zu aggressiv gesetzter max-age sperrt Besucher tagelang aus, falls mit dem Zertifikat etwas schiefgeht. Deshalb gilt eine klare Reihenfolge:

  • Starten Sie mit einem niedrigen max-age, etwa einige Stunden oder wenige Tage, während Sie beobachten, ob HTTPS auf allen Bereichen stabil läuft.
  • Erhöhen Sie den Wert schrittweise, erst auf Wochen, dann auf einen langfristigen Zeitraum.
  • Aktivieren Sie includeSubDomains erst, wenn wirklich jede Subdomain, auch Mail- oder Testserver, per HTTPS erreichbar ist. Eine einzige HTTP-only-Subdomain wird sonst komplett unerreichbar.
  • Erwägen Sie preload erst zum Schluss, und nur nach vollständiger Prüfung.

Die Aufnahme in die Preload-Liste von Browsern ist an strikte Bedingungen geknüpft: max-age von mindestens einem Jahr, includeSubDomains und preload müssen gesetzt sein, und gültige HTTPS-Zertifikate müssen für sämtliche Subdomains vorliegen. Das Entscheidende dabei: Eine Aufnahme in diese Liste ist praktisch dauerhaft und lässt sich nur schwer und langsam rückgängig machen, weil die Liste fest in Browsern einkompiliert wird. Vor einem Preload-Antrag gehört deshalb jede Subdomain, jeder Redirect und jedes Zertifikat auf den Prüfstand.

Wie prüfen Sie, ob Ihre Header wirklich ankommen?

Ein gesetzter Header im Code bedeutet nicht automatisch, dass er beim Besucher ankommt. CDN, Cache-Plugin oder eine vergessene location-Regel bei nginx können Header unterwegs verschlucken.

  • securityheaders.com liefert eine schnelle Bewertung mit Note von A bis F und zeigt fehlende Header sofort an.
  • Mozilla Observatory geht tiefer und bewertet zusätzlich CSP-Qualität und TLS-Konfiguration.
  • WebPageTest zeigt Header pro einzelner Ressource, nützlich um zu sehen, ob auch Bilder und Skripte die Header tragen.
  • Der Netzwerk-Tab in den Browser-Entwicklertools zeigt in Echtzeit, was tatsächlich beim Client ankommt, inklusive Redirects und Fehlerseiten.

Prüfen Sie nicht nur die Startseite. Testen Sie auch eine 404-Fehlerseite, einen HTTP-zu-HTTPS-Redirect und, falls vorhanden, eine über ein CDN ausgelieferte statische Datei. Genau an diesen Stellen fehlen Header am häufigsten, weil Entwickler nur die normale HTML-Antwort im Blick hatten. Ein guter Score bei securityheaders.com oder Mozilla Observatory ist ein nützliches Signal, ersetzt aber keine umfassende Anwendungssicherheit, etwa saubere Eingabevalidierung oder aktuelle Plugin-Versionen.

Konfigurationsbeispiele für Apache, nginx und PHP

Für Apache gehören folgende Zeilen in die vHost-Konfiguration oder, falls kein Zugriff darauf besteht, in die .htaccess außerhalb des WordPress-Blocks:

<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Strict-Transport-Security "max-age=eine angemessene Zeitspanne; includeSubDomains"
    Header always set Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-report"
</IfModule>

Bei nginx sieht die entsprechende Konfiguration im Serverblock so aus:

add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=eine angemessene Zeitspanne; includeSubDomains" always;

Denken Sie daran, diese Zeilen in jedem location-Block zu wiederholen, der eigene add_header-Anweisungen enthält, sonst gehen die Regeln aus dem Serverblock verloren.

Für den PHP-Weg über functions.php, wenn kein Server- oder .htaccess-Zugriff besteht:

add_action('send_headers', function() {
    header('X-Content-Type-Options: nosniff');
    header('Referrer-Policy: strict-origin-when-cross-origin');
});
  1. Spielen Sie jede Änderung zuerst auf einer Staging-Kopie ein, nie direkt auf der Live-Seite.
  2. Testen Sie nach jeder Zeile mit dem Browser-Netzwerk-Tab, ob der Header ankommt.
  3. Prüfen Sie explizit eine Fehlerseite und einen Redirect, nicht nur die Startseite.
  4. Erst wenn alle drei Ebenen (HTML, Assets, Redirects) den Header zeigen, gilt der Rollout als abgeschlossen.

Bei WordPress-Multisite-Installationen gilt dieselbe Logik pro Domain oder Subdomain. Nutzen Sie Domain-Mapping, muss die Server-Konfiguration jede zugeordnete Domain einzeln abdecken, denn eine zentrale .htaccess im Hauptverzeichnis reicht bei eigenständigen Domains oft nicht aus. Zur Performance: Sicherheitsheader selbst kosten praktisch keine Ladezeit, sie sind wenige Bytes pro Antwort. Google wertet HTTPS und eine solide Sicherheitskonfiguration indirekt positiv, doch Header allein verbessern kein Ranking, sie verhindern nur, dass ein Sicherheitsvorfall Ihre Sichtbarkeit zerstört. Bei älteren Browsern, die COOP oder Permissions-Policy nicht kennen, ignorieren diese den Header einfach, ohne Fehler zu werfen, ein Kompatibilitätsrisiko besteht hier praktisch nicht.

Wann lohnt sich professionelle Unterstützung beim Security-Rollout?

Nicht jeder Website-Betreiber hat Root-Zugriff auf den Server oder Zeit, wochenlang Report-Only-Daten auszuwerten. Wenn Ihr Hosting-Paket keinen vHost-Zugang erlaubt, Sie einen komplexen WooCommerce-Checkout mit mehreren Zahlungsanbietern betreiben oder über eine Multisite-Installation mit mehreren Domains nachdenken, wird aus einer Nachmittagsaufgabe schnell ein mehrwöchiges Projekt. Auch die Preload-Entscheidung, die kaum rückgängig zu machen ist, verdient einen zweiten Blick von jemandem, der das schon oft gemacht hat.

Werbeeinfach übernimmt Ihren Security-Rollout für WordPress

Werbeeinfach ist die Alternative zum Trial-and-Error mit .htaccess-Dateien und Copy-Paste-Snippets aus Foren: Statt Sie durch Report-Only-Auswertungen, Nonce-Konfiguration und die Preload-Entscheidung allein zu schicken, übernehmen wir den kompletten Rollout auf Serverebene, sauber getestet, bevor irgendetwas live geht.

Werbeeinfach

Als WordPress-Agentur betreuen wir Unternehmen und Onlineshops bundesweit, von der Neuentwicklung bis zur laufenden WordPress Wartung. Unsere Sicherheitspakete für Websites decken genau die Themen ab, die in diesem Artikel eine Rolle spielen: HTTPS-Migration, CSP- und HSTS-Rollout, Multisite-Konfiguration und regelmäßige Audits. Wenn Sie planen, Ihre HTTPS-Umstellung sauber mit Header-Konfiguration zu verbinden, oder Ihre Seite zunächst durch ein Sicherheitsaudit prüfen lassen wollen, ist das ein guter Ausgangspunkt für ein Gespräch. Kontaktieren Sie uns, schildern Sie Ihre Serverumgebung, und wir sagen Ihnen ehrlich, ob ein Rollout in Tagen oder Wochen realistisch ist.

Quellen

Für tieferes Nachschlagen eignen sich diese Quellen: MDN für exakte CSP-Direktiven, web.dev für eine kompakte Übersicht empfohlener Header, hstspreload.org für den Preload-Check Ihrer Domain sowie Mozilla Observatory und securityheaders.com für regelmäßige Audits.

FAQ

Welche Sicherheitsplugins gibt es für WordPress?

Es gibt spezialisierte Header-Plugins wie Security Header, die eine Oberfläche zum Setzen von HSTS, CSP und Co. bieten, inklusive Report-Only-Modus. Für WooCommerce-Shops lohnt zusätzlich ein Blick auf spezialisierte Security-Plugin-Übersichten, da Shop-Umgebungen zusätzliche Angriffsflächen wie Zahlungsformulare mitbringen.

Wie kann ich meine WordPress-Website sicher machen?

Eine sichere Website kombiniert mehrere Ebenen: aktuelle WordPress-Kern-, Theme- und Plugin-Versionen, starke Zugangsdaten, regelmäßige Backups und eben die hier beschriebenen Sicherheitsheader auf Serverebene. Es werden auch Sicherheitspakete angeboten, die diese Bausteine zusammenführen.

Wie kann ich den Header in WordPress gestalten?

Meinen Sie damit den sichtbaren Seitenkopf im Theme, gehört das in den Theme-Customizer oder Page-Builder Ihrer Wahl, nicht in die HTTP-Header-Konfiguration. Geht es um HTTP-Sicherheitsheader wie CSP oder HSTS, setzen Sie diese über die vHost-Datei, die .htaccess oder ersatzweise über functions.php mit dem send_headers-Hook.

Wie kann ich eine WordPress-Seite auf Sicherheit überprüfen?

Prüfen Sie zunächst mit securityheaders.com oder Mozilla Observatory, welche Header überhaupt ankommen, und testen Sie dabei nicht nur die Startseite, sondern auch Fehlerseiten und Redirects. Für eine tiefere Prüfung inklusive Plugin-Versionen und Dateiberechtigungen eignet sich ein vollständiges WordPress-Sicherheitsaudit.

Was kostet die Einrichtung von Sicherheitsheadern durch Werbeeinfach?

Die Kosten hängen von Ihrer Serverumgebung und dem Umfang des Rollouts ab, etwa ob CSP mit vielen Drittanbietern konfiguriert werden muss. Aktuelle Preise für Wartung und Sicherheitspakete finden Sie direkt auf der Wartungsseite.

Empfehlungen

Lazy Loading in WordPress richtig aktivieren und testen

Lazy Loading in WordPress aktivieren: native Funktion nutzen, Ausnahmen für Herobild und große sichtbare Elemente per Filter setzen und nur bei komplexen…

WooCommerce mehrsprachig einrichten: Der technische Leitfaden

WooCommerce mehrsprachig einrichten: Indexierbare Unterverzeichnisse, hreflang, etabliertes Mehrsprachplugin und Stagingtest sichern Checkout und SEO.

WordPress Memory Limit erhöhen: Wann es wirklich nötig ist

Prüfen Sie zuerst das aktuelle Speicherlimit in WordPress und erhöhen Sie nur gezielt, meist auf 256M für Businessseiten; WooCommerce benötigt oft mehr.

Zwei‑Faktor‑Authentifizierung für WordPress richtig einrichten

Sichern Sie Ihre WordPress Website mit zweistufiger Authentifizierung: WP 2FA, Authentifizierungsapp oder Passkey einrichten und Backupcodes anlegen.

GraphQL vs REST API: So trifft dein Team die richtige Wahl

Erfahren Sie, wann Ihr Team besser GraphQL für verschachtelte Frontendanfragen einsetzt und wann REST APIs wegen Cachebedarf, Einfachheit oder…

Custom Post Types in WordPress richtig einsetzen

Kurz erklärt: Wann eigene Beitragstypen in WordPress sinnvoll sind und wie Sie strukturierte Inhalte, Archive und Adminmenüs anlegen.

WordPress-Sicherheitsaudit: So prüfen Sie Ihre Website richtig

Sicherheitsaudit für WordPress deckt kritische Lücken auf, liefert Prioritäten für Maßnahmen und dient als Nachweis nach Art. 32 DSGVO.

Schema Markup in WordPress richtig einsetzen: Plugin oder Code?

Erfahren Sie, wann Schema Markup in WordPress mit einem gut konfigurierten SEO Plugin und JSON-LD ausreicht und wann manuelles JSON-LD nötig ist;…

HTTPS-Umstellung bei WordPress: So gelingt der Wechsel ohne Ausfall

So gelingt die HTTPS Umstellung bei WordPress ohne Ausfall: Backup anlegen, SSL Zertifikat aktivieren, Datenbank serialisierungssicher ersetzen, 301…

WordPress White Screen: So bringst du deine Seite zurück

Weißen Bildschirm bei WordPress? Schnellchecks, Cache leeren und Debugtipps zeigen die Fehlerursache, damit du die Seite wieder online bringst.

WERBEEINFACH.de ist ein Angebot der VAMO GmbH

Wir bauen keine Websites.
Wir erschaffen Online-Lösungen, die Kunden gewinnen.

0711 50 888 24 50

kontakt@werbeeinfach.de

Online Terminvereinbarung

Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.