HSTS für Laravel konfigurieren

Schritt-für-Schritt-Anleitung: HTTP Strict Transport Security in Laravel einrichten — Middleware, HTTPS-Redirect und Preload-Registrierung.

Laravel · Schritt für Schritt

HSTS in Laravel

HTTP Strict Transport Security (HSTS) weist Browser an, ausschließlich verschlüsselte Verbindungen zu verwenden. In Laravel setzen Sie den Header über eine Middleware — ohne Server-Konfiguration. HSTS ist mit 15 von 166 Punkten ein wichtiger Faktor im Wolf-Agents Web Security Check.

Zusätzlich zum HSTS-Header muss Laravel HTTPS auf Anwendungsebene erzwingen. URL::forceScheme('https') stellt sicher, dass alle generierten URLs (Routes, Assets, Redirects) HTTPS verwenden. Bei Reverse-Proxy-Setups ist die TrustProxies-Middleware entscheidend.

1 Schritt 1 von 3

HSTS-Header in der Middleware setzen

Fügen Sie den Strict-Transport-Security Header in Ihrer SecurityHeaders-Middleware hinzu. Der Header wird bei jedem Response gesetzt und weist den Browser an, für ein Jahr (31536000 Sekunden) ausschließlich HTTPS zu verwenden.

app/Http/Middleware/SecurityHeaders.php Produktiv
// app/Http/Middleware/SecurityHeaders.php
public function handle(Request $request, Closure $next): Response
{
    $response = $next($request);

    // HSTS — nur über HTTPS senden
    $response->headers->set(
        'Strict-Transport-Security',
        'max-age=31536000; includeSubDomains; preload'
    );

    return $response;
}
HSTS nur über HTTPS

RFC 6797 schreibt vor, dass Browser HSTS-Header über unverschlüsselte Verbindungen ignorieren. Der Header hat nur Wirkung, wenn er über HTTPS gesendet wird. Laravel Forge und Valet konfigurieren HTTPS automatisch.

2 Schritt 2 von 3

HTTPS-Redirect und TrustProxies einrichten

HSTS setzt eine funktionierende HTTPS-Konfiguration voraus. URL::forceScheme('https') sorgt dafür, dass Laravel alle URLs mit HTTPS generiert. Bei Reverse-Proxy-Setups (Nginx, Cloudflare) muss die TrustProxies-Middleware konfiguriert sein.

app/Providers/AppServiceProvider.php HTTPS erzwingen
// app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\URL;

public function boot(): void
{
    // HTTPS in Produktion erzwingen
    if ($this->app->environment('production')) {
        URL::forceScheme('https');
    }
}
app/Http/Middleware/TrustProxies.php Reverse Proxy
// app/Http/Middleware/TrustProxies.php
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;

class TrustProxies extends Middleware
{
    protected $proxies = '*';
    protected $headers = Request::HEADER_X_FORWARDED_FOR |
                         Request::HEADER_X_FORWARDED_PROTO;
}
Starten Sie mit einem kurzen max-age=300 (5 Minuten) und erhöhen Sie schrittweise auf 31536000 (1 Jahr). So können Sie bei Problemen schnell zurücksetzen.
3 Schritt 3 von 3

Verifizieren und Preload beantragen

Prüfen Sie den HSTS-Header mit curl und beantragen Sie anschließend Preload, damit Browser HTTPS ab dem allerersten Besuch erzwingen.

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

# Erwartete Ausgabe:
# Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Preload ist quasi-permanent. Die Entfernung dauert Monate. Nur beantragen, wenn alle Subdomains dauerhaft HTTPS unterstützen.

Compliance-Anforderungen

PCI DSS 4.0 — Requirement 4.2.1 fordert TLS 1.2+ für alle Datenübertragungen. HSTS stellt sicher, dass Browser keine unverschlüsselten Verbindungen aufbauen.
OWASP ASVS — V14.4.5 fordert HSTS mit mindestens max-age=15768000. Die empfohlene Konfiguration (31536000) übertrifft diese Anforderung.
BSI IT-Grundschutz — APP.3.1.A14 fordert HSTS für alle Webanwendungen, die sensible Daten verarbeiten.

Wie steht Ihre Domain bei HSTS?

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