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.
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.
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.
<?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;
} Für den HSTS-Preload (hstspreload.org) brauchen Sie max-age von mindestens 31536000 (1 Jahr), includeSubDomains und preload. Die hier gezeigte Konfiguration mit 63072000 (2 Jahre) deckt diese drei Kriterien ab.
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.
# HSTS-Header prüfen
curl -sI https://ihre-domain.de | grep -i strict-transport
# Erwartete Ausgabe:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload 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
Auch verfügbar für:
Wie steht Ihre Domain bei HSTS?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.