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. Unsere Konfiguration mit 63072000 (2 Jahre) erfüllt alle Anforderungen.
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
Wie steht Ihre Domain bei HSTS?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.