Erweiterte Security Header in PHP konfigurieren
Schritt-für-Schritt-Anleitung: Origin-Agent-Cluster, X-DNS-Prefetch-Control und weitere Header in PHP — mit header()-Code, auto_prepend_file und PSR-15.
Erweiterte Security Header in PHP
Neben den Standard-Security-Headern gibt es erweiterte Header, die zusätzliche Schutzmechanismen bieten: Origin-Agent-Cluster für Prozessisolation, X-DNS-Prefetch-Control gegen DNS-Leaks und X-Permitted-Cross-Domain-Policies gegen Flash/PDF-Angriffe. Zusammen sind sie 4 von 166 Punkten im Wolf-Agents Web Security Check wert.
In PHP setzen Sie alle erweiterten Header per header(). Da diese Header keine Nebenwirkungen haben und auf allen Seiten gleich sein sollen, eignet sich die auto_prepend_file-Methode in der .user.ini ideal. Fügen Sie die Header einfach Ihrer bestehenden security-headers.php hinzu, die bereits die Standard-Header setzt.
Diese Header sind Quick-Wins — wenige Zeilen Code, keine Kompatibilitätsprobleme, sofortige Verbesserung. Besonders X-DNS-Prefetch-Control: off ist relevant für datenschutzsensible Anwendungen, da DNS-Prefetching IP-Adressen an DNS-Server leaken kann, bevor der Nutzer einen Link anklickt.
Erweiterte Header in PHP konfigurieren
Drei Varianten: Direkter header()-Aufruf in der Security-Headers-Datei, auto_prepend_file für automatische Einbindung auf allen Seiten, und PSR-15-Middleware mit konstanten-basierter Konfiguration für Framework-Projekte.
<?php
// security-headers.php — Erweiterte Header
if (!headers_sent()) {
// Origin-Agent-Cluster: Prozessisolation
header('Origin-Agent-Cluster: ?1');
// X-DNS-Prefetch-Control: DNS-Prefetch steuern
header('X-DNS-Prefetch-Control: off');
// X-Download-Options: IE Download-Schutz
header('X-Download-Options: noopen');
// X-Permitted-Cross-Domain-Policies
header('X-Permitted-Cross-Domain-Policies: none');
} ; .user.ini — Auto-Prepend für erweiterte Header
; Alle erweiterten Header werden automatisch gesetzt
auto_prepend_file = "/var/www/html/security-headers.php"
; Die security-headers.php enthält ALLE Header:
; - Standard-Header (HSTS, CSP, etc.)
; - Erweiterte Header (hier konfiguriert)
; PHP-FPM Cache-TTL: 5 Minuten <?php
// src/Middleware/AdvancedHeadersMiddleware.php — PSR-15
namespace App\Middleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class AdvancedHeadersMiddleware implements MiddlewareInterface
{
private const HEADERS = [
'Origin-Agent-Cluster' => '?1',
'X-DNS-Prefetch-Control' => 'off',
'X-Download-Options' => 'noopen',
'X-Permitted-Cross-Domain-Policies' => 'none',
];
public function process($request, $handler): ResponseInterface
{
$response = $handler->handle($request);
foreach (self::HEADERS as $name => $value) {
$response = $response->withHeader($name, $value);
}
return $response;
}
} Der Wert von Origin-Agent-Cluster ist ?1 (Structured Field Boolean). Das ist keine normale Header-Syntax — der Browser erwartet exakt dieses Format. true oder 1 funktionieren nicht.
Konfiguration verifizieren
Prüfen Sie alle vier erweiterten Header per curl. Alle müssen auf PHP-generierten Seiten gesetzt sein. Für statische Dateien brauchen Sie zusätzlich die Webserver-Konfiguration.
# Erweiterte Header prüfen
curl -sI https://ihre-domain.de | grep -iE \
"origin-agent|x-dns|x-download|x-permitted"
# Erwartete Ausgabe:
Origin-Agent-Cluster: ?1
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
# Statische Dateien auch testen:
curl -sI https://ihre-domain.de/style.css | grep -iE "origin-agent|x-dns" Häufige Fehler
Headers already sent
Der häufigste PHP-Fehler: header() nach einer Ausgabe aufrufen. Nutzen Sie auto_prepend_file — die Header-Datei wird garantiert vor jeder Ausgabe geladen. Eine BOM oder Leerzeichen vor <?php zählt als Ausgabe.
Origin-Agent-Cluster Wert falsch
Der Wert muss ?1 sein (Structured Field Boolean), nicht true, 1 oder yes. Falsche Werte werden vom Browser ignoriert und die Prozessisolation greift nicht.
X-DNS-Prefetch-Control bremst Performance
Das Deaktivieren von DNS-Prefetching erhöht die Latenz beim ersten Request zu externen Domains. Für Anwendungen mit vielen externen Ressourcen wägen Sie Sicherheit gegen Performance ab — bei reinen Same-Origin-Anwendungen ist off optimal.
Statische Dateien ohne Header
PHP header() wirkt nur für PHP-Dateien. Statische Assets brauchen die Header über die Webserver-Konfiguration (Apache/Nginx). Ohne die Webserver-Konfiguration fehlen die erweiterten Header auf CSS, JS und Bildern.
Compliance-Relevanz
Wie steht Ihre Domain bei Erweiterte Header?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.