Security-Header-Architektur für Drupal

Drei Wege im Vergleich: seckit-Modul für schnelle Ergebnisse, Custom EventSubscriber für maximale Kontrolle und .htaccess als Fallback. Welcher Ansatz passt zu Ihrem Setup?

Drupal · Schritt für Schritt

Security Headers in Drupal — Architektur-Überblick

Security Headers schützen Ihre Drupal-Website vor Cross-Site Scripting (XSS), Clickjacking, MIME-Sniffing und SSL-Stripping. Im Wolf-Agents Web Security Check fließen alle Header in eine Gesamtnote aus 166 Punkten ein. Drupal bietet drei grundlegend verschiedene Wege, diese Header zu konfigurieren — jeder mit eigenen Stärken und Grenzen.

Das Security Kit Modul (seckit) bietet eine grafische Oberfläche unter /admin/config/system/seckit und deckt die meisten Standard-Header ab. Für Header, die seckit nicht unterstützt — etwa Cross-Origin (CORP/COEP/COOP) oder Clear-Site-Data — benötigen Sie einen Custom EventSubscriber. Die .htaccess ist der einfachste Fallback, wird aber bei Drupal-Core-Updates überschrieben.

Drei Konfigurationswege im Detail

Die empfohlene Strategie: seckit für Standard-Header installieren, dann einen EventSubscriber für erweiterte Header ergänzen. Die .htaccess dient als Sicherheitsnetz für den Fall, dass Drupal nicht geladen wird (z.B. bei PHP-Fehlern).

seckit Modul
Terminal + Admin-UI Empfohlen
# seckit per Composer installieren
composer require drupal/seckit
drush en seckit -y
drush cr

# Konfiguration unter:
# /admin/config/system/seckit
# Tabs: CSP | HSTS | Clickjacking | Various
EventSubscriber
SecurityHeadersSubscriber.php Erweitert
<?php
// modules/custom/security_headers/src/EventSubscriber/SecurityHeadersSubscriber.php

namespace Drupal\security_headers\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class SecurityHeadersSubscriber implements EventSubscriberInterface {

  public static function getSubscribedEvents() {
    // Priorität > 0 damit nach seckit
    return [KernelEvents::RESPONSE => ['onResponse', -10]];
  }

  public function onResponse(ResponseEvent $event) {
    $response = $event->getResponse();

    // Header die seckit NICHT abdeckt
    $response->headers->set('Cross-Origin-Opener-Policy', 'same-origin');
    $response->headers->set('Cross-Origin-Resource-Policy', 'same-origin');
    $response->headers->set('Cross-Origin-Embedder-Policy', 'require-corp');
    $response->headers->set('Origin-Agent-Cluster', '?1');
    $response->headers->set('X-DNS-Prefetch-Control', 'off');
  }
}
security_headers.services.yml Registrierung
# modules/custom/security_headers/security_headers.services.yml
services:
  security_headers.response_subscriber:
    class: Drupal\security_headers\EventSubscriber\SecurityHeadersSubscriber
    tags:
      - { name: event_subscriber }
.htaccess Fallback
.htaccess Fallback
# .htaccess (im Drupal-Root, VOR dem RewriteEngine Block)
# ACHTUNG: Drupal Core-Updates überschreiben die .htaccess!
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
  Header always set Cross-Origin-Opener-Policy "same-origin"
</IfModule>
Wann welchen Weg nutzen?

seckit ist ideal für Teams mit wenig PHP-Erfahrung — alles per Klick. Der EventSubscriber gibt volle Kontrolle und ist update-sicher. Die .htaccess ist der schnellste Weg, hat aber das Risiko der Überschreibung bei Core-Updates. Idealerweise kombinieren Sie seckit + EventSubscriber.

Verifizierung der Header-Konfiguration

Nach jeder Änderung an seckit-Einstellungen, EventSubscribern oder der .htaccess müssen Sie den Drupal-Cache leeren. Ohne drush cr werden Änderungen an EventSubscribern und Services nicht aktiv.

Terminal Verifizierung
# Cache leeren nach Änderungen
drush cr

# Header prüfen
curl -sI https://ihre-domain.de | grep -iE "(strict-transport|x-content-type|x-frame|referrer-policy|permissions-policy|cross-origin)"
Automatisiertes Monitoring

Der Wolf-Agents Web Security Check prüft alle Header automatisch und bewertet sie mit bis zu 166 Punkten. Mit aktivem Monitoring werden Sie bei fehlenden oder geänderten Headern sofort benachrichtigt.

Häufige Fehler bei Security Headers in Drupal

drush cr vergessen nach Änderungen

Der häufigste Fehler: Nach dem Anlegen eines EventSubscribers oder der Änderung der services.yml fehlt der Cache Rebuild. Ohne drush cr kennt Drupal den neuen Service nicht. Auf Shared Hosting ohne Drush-Zugang nutzen Sie den Admin-Link unter /admin/config/development/performance.

Drupal Core-Update überschreibt .htaccess

Bei composer update drupal/core wird die .htaccess aus dem Core-Paket überschrieben. Ihre manuellen Header-Ergänzungen gehen verloren. Lösung: Header per seckit oder EventSubscriber setzen — beide sind update-sicher. Wenn Sie die .htaccess nutzen müssen, versionieren Sie Ihre Änderungen separat.

seckit überschreibt manuell gesetzte Header

Wenn sowohl seckit als auch ein EventSubscriber den gleichen Header setzen, gewinnt der letzte Writer. Prüfen Sie die Modul-Gewichtung und setzen Sie die EventSubscriber-Priorität auf -10 (nach seckit), um bewusst zu überschreiben.

EventSubscriber nicht registriert

Die services.yml fehlt oder hat einen Syntaxfehler. Prüfen Sie: Dateiname muss [modulname].services.yml sein, der Tag event_subscriber muss gesetzt sein, und die Namespace-Deklaration in der PHP-Klasse muss zum Dateipfad passen.

Compliance-Relevanz

Eine konsolidierte Security-Header-Strategie in Drupal erfüllt zentrale Anforderungen mehrerer Compliance-Frameworks. Besonders in regulierten Branchen ist die lückenlose Dokumentation der Header-Konfiguration wichtig.

NIS2Art. 21(e) — Sicherheit bei Erwerb, Entwicklung und Wartung von Netz- und Informationssystemen
BSIAPP.3.1 — Webserver-Absicherung mit Security Headern
DSGVOArt. 32 — Technische und organisatorische Maßnahmen zum Schutz personenbezogener Daten

Wie steht Ihre Domain bei Implementierungs-Architektur?

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