HSTS in PHP konfigurieren

Schritt-für-Schritt-Anleitung: HTTP Strict Transport Security in PHP einrichten — mit header()-Code zum Kopieren, Preload-Vorbereitung und auto_prepend_file.

PHP · Schritt für Schritt

HSTS in PHP

HTTP Strict Transport Security (HSTS) erzwingt HTTPS-Verbindungen im Browser. Einmal gesetzt, verweigert der Browser für die angegebene Dauer (max-age) jede unverschlüsselte Verbindung. HSTS bringt 15 von 166 Punkten im Wolf-Agents Web Security Check.

In PHP setzen Sie HSTS mit einem einzigen header()-Aufruf. Über auto_prepend_file in der .user.ini wird der Header automatisch für alle PHP-Dateien gesetzt — ideal für Projekte ohne Framework.

1 Schritt 1 von 3

HSTS-Header in PHP setzen

Fügen Sie den HSTS-Header in Ihrer security-headers.php hinzu. Der Header wird bei jedem Response automatisch gesetzt. Optional können Sie auch einen HTTPS-Redirect direkt in PHP implementieren — obwohl der Redirect besser auf Webserver-Ebene (Nginx/Apache) konfiguriert wird.

security-headers.php Produktiv
<?php
// security-headers.php — HSTS-Konfiguration

if (!headers_sent()) {
    // HSTS mit 2 Jahren max-age, Subdomains und Preload
    header('Strict-Transport-Security: max-age=63072000; includeSubDomains; preload');
}

// Optional: HTTPS-Redirect in PHP
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
    $redirectUrl = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('Location: ' . $redirectUrl, true, 301);
    exit;
}
Preload-Vorbereitung

Für den HSTS-Preload (hstspreload.org) brauchen Sie max-age von mindestens 31536000 (1 Jahr), includeSubDomains und preload. Unsere Konfiguration mit 63072000 (2 Jahre) erfüllt alle Anforderungen.

2 Schritt 2 von 3

Konfiguration verifizieren

Prüfen Sie den Header mit curl. Der max-age-Wert muss mindestens 31536000 betragen. Für den Wolf-Agents Web Security Check müssen auch includeSubDomains und preload gesetzt sein.

Terminal Verifizierung
# HSTS-Header prüfen
curl -sI https://ihre-domain.de | grep -i strict-transport

# Erwartete Ausgabe:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Nutzen Sie den Wolf-Agents Web Security Check für eine vollständige Prüfung aller 15 Punkte dieses Headers.
3 Schritt 3 von 3

Häufige Fehler

HSTS auf HTTP gesetzt

HSTS darf nur über HTTPS gesendet werden — Browser ignorieren den Header auf HTTP-Verbindungen. Stellen Sie sicher, dass Ihr Server zuerst auf HTTPS redirectet und dann den HSTS-Header setzt.

header() nach Ausgabe

Der häufigste PHP-Fehler: header() nach einer Ausgabe aufrufen. Verwenden Sie auto_prepend_file in der .user.ini — die Header-Datei wird garantiert vor jeder Ausgabe geladen.

includeSubDomains ohne Subdomain-HTTPS

Mit includeSubDomains müssen alle Subdomains HTTPS unterstützen. Prüfen Sie vor dem Setzen, ob Staging-, API- und interne Subdomains gültige Zertifikate haben.

Compliance-Relevanz

OWASP ASVS — V14.4.5 fordert Strict-Transport-Security mit ausreichend langem max-age.
BSI TR-03116-4 — Fordert HSTS für alle öffentlich erreichbaren Webserver.
PCI DSS 4.0 — Anforderung 4.2.1 — Verschlüsselung aller Daten bei der Übertragung mit starker Kryptografie.
NIS2 — Art. 21(e) — Sicherheit bei der Kommunikation und dem Transport von Daten.

Wie steht Ihre Domain bei HSTS?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.