Security-Header-Architektur für Laravel
Alle Security Headers in einer zentralen Middleware konfigurieren — von der Erstellung über die Registrierung bis zur optimalen Header-Reihenfolge.
Konsolidierte Security Headers in Laravel
Laravels Middleware-Architektur ist ideal für Security Headers: Eine einzige Middleware-Klasse
setzt alle Header zentral, testbar und versionierbar. Statt Header über verschiedene Konfigurationsdateien
zu verteilen, bündelt SecurityHeaders.php alles an einem Ort.
Diese Anleitung zeigt die vollständige Implementierung: von der Middleware-Erstellung über die korrekte Registrierung in Laravel 10 und 11 bis zur optimalen Header-Reihenfolge. Der Code ist direkt in Ihr Projekt kopierbar.
SecurityHeaders-Middleware erstellen
Erstellen Sie eine neue Middleware mit php artisan make:middleware SecurityHeaders. Diese Middleware
fängt jeden Response ab und fügt alle Security Headers hinzu. Der Nonce wird vor dem Response generiert
und über app()->instance() für Blade-Templates verfügbar gemacht.
<?php
// app/Http/Middleware/SecurityHeaders.php
// Konsolidierte Security-Header-Middleware
// Generiert aus Wolf-Agents Web Security Guide
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class SecurityHeaders
{
public function handle(Request $request, Closure $next): Response
{
// Nonce für CSP generieren
$nonce = base64_encode(random_bytes(16));
app()->instance('csp-nonce', $nonce);
$response = $next($request);
// --- Content Security Policy ---
$csp = implode('; ', [
"default-src 'self'",
"script-src 'self' 'nonce-{$nonce}' 'strict-dynamic'",
"style-src 'self' 'unsafe-inline'",
"img-src 'self' data: https:",
"font-src 'self'",
"connect-src 'self'",
"object-src 'none'",
"frame-ancestors 'self'",
"base-uri 'self'",
"form-action 'self'",
"upgrade-insecure-requests",
]);
$response->headers->set('Content-Security-Policy', $csp);
// --- HSTS ---
$response->headers->set('Strict-Transport-Security',
'max-age=31536000; includeSubDomains; preload');
// --- Weitere Header ---
$response->headers->set('X-Content-Type-Options', 'nosniff');
$response->headers->set('X-Frame-Options', 'SAMEORIGIN');
$response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin');
$response->headers->set('Permissions-Policy',
'camera=(), microphone=(), geolocation=(), payment=()');
$response->headers->set('Cross-Origin-Opener-Policy', 'same-origin');
$response->headers->set('Cross-Origin-Resource-Policy', 'same-origin');
$response->headers->set('Origin-Agent-Cluster', '?1');
return $response;
}
} Mehrere Middleware-Klassen für verschiedene Header erzeugen unnötigen Overhead. Eine einzige Middleware reduziert die Angriffsfläche (ein Ort zum Auditen), vereinfacht das Deployment und vermeidet Reihenfolge-Konflikte zwischen Middlewares.
Middleware registrieren
Die Registrierung unterscheidet sich zwischen Laravel 10 und 11. In Laravel 11 erfolgt sie in
bootstrap/app.php, in Laravel 10 im Kernel.php. Registrieren Sie die
Middleware in der web-Middleware-Gruppe, damit sie nur auf Browser-Requests angewendet wird.
// bootstrap/app.php (Laravel 11+)
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
$middleware->append(
\App\Http\Middleware\SecurityHeaders::class
);
})
->create(); // app/Http/Kernel.php (Laravel 10)
protected $middlewareGroups = [
'web' => [
// ... bestehende Middleware
\App\Http\Middleware\SecurityHeaders::class,
],
]; Cache-Control: no-store und CORS-Headern, aber ohne CSP und Session-Cookies. Empfohlene Header-Reihenfolge
Die Reihenfolge der Header im Code beeinflusst nicht die Browser-Verarbeitung, aber eine konsistente Struktur erleichtert Audits und Wartung. Wir empfehlen diese Reihenfolge nach Sicherheitsrelevanz.
Konfiguration verifizieren
Nach der Registrierung prüfen Sie die Header mit curl, den Browser DevTools
und dem Wolf-Agents Web Security Check. Stellen Sie sicher, dass alle Header korrekt gesetzt sind.
# Config-Cache leeren (wichtig nach .env-Änderungen)
php artisan config:cache
# Lokalen Server starten
php artisan serve
# Header prüfen
curl -sI http://localhost:8000 | grep -iE "content-security|strict-transport|x-frame|referrer|x-content-type" Checkliste nach Deployment
Browser DevTools
Öffnen Sie F12 und prüfen Sie im Network-Tab die Response Headers. Alle Security Header müssen auf jeder Seite sichtbar sein.
Wolf-Agents Check
Der Web Security Check prüft 166 Punkte und zeigt fehlende oder fehlerhafte Header sofort an.
PHPUnit-Test
Schreiben Sie einen Feature-Test, der prüft, ob alle erwarteten Header in der Response vorhanden sind. So fällt eine versehentliche Entfernung sofort auf.
Compliance-Anforderungen
Eine konsolidierte Middleware-Architektur unterstützt direkt die Anforderungen mehrerer Compliance-Frameworks. Die zentrale Verwaltung aller Security Headers in einer Datei vereinfacht Audits erheblich.
Wie steht Ihre Domain bei Implementierungs-Architektur?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.