Cross-Origin Headers in Drupal konfigurieren

CORP, COEP und COOP gegen Spectre-Angriffe in Drupal — nur per EventSubscriber oder .htaccess, da seckit diese Header nicht unterstützt.

Drupal · Schritt für Schritt

Cross-Origin Headers in Drupal

Cross-Origin Headers (CORP, COEP, COOP) schützen gegen Spectre-basierte Seitenkanalangriffe und kontrollieren, wie Ihre Website mit Cross-Origin-Ressourcen interagiert. Diese drei Header zusammen bringen 30 von 166 Punkten im Wolf-Agents Web Security Check.

Wichtig: seckit unterstützt diese Header nicht. Sie benötigen einen Custom EventSubscriber oder die .htaccess. Besondere Vorsicht bei Cross-Origin-Embedder-Policy: require-corp — dieser Header blockiert alle Cross-Origin-Ressourcen, die kein explizites CORP setzen (z.B. externe Bilder, Videos, iframes).

Der Wolf-Agents Web Security Check prüft alle drei Cross-Origin Headers einzeln und bewertet sie zusammen mit 30 von 166 Punkten. Fehlende oder falsch konfigurierte Header werden im Scan-Ergebnis mit konkreten Drupal-spezifischen Empfehlungen angezeigt.

Implementierung per EventSubscriber

Da seckit diese Header nicht unterstützt, ist der EventSubscriber der sauberste Weg. Vergessen Sie nicht, den Service in der services.yml zu registrieren.

EventSubscriber
CrossOriginSubscriber.phpEmpfohlen
<?php
// modules/custom/security_headers/src/EventSubscriber/CrossOriginSubscriber.php

namespace Drupal\security_headers\EventSubscriber;

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

class CrossOriginSubscriber implements EventSubscriberInterface {

  public static function getSubscribedEvents() {
    return [KernelEvents::RESPONSE => ['onResponse', 0]];
  }

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

    // Cross-Origin-Opener-Policy
    $response->headers->set('Cross-Origin-Opener-Policy',
      'same-origin');

    // Cross-Origin-Resource-Policy
    $response->headers->set('Cross-Origin-Resource-Policy',
      'same-origin');

    // Cross-Origin-Embedder-Policy
    // VORSICHT: Kann externe Ressourcen blockieren!
    $response->headers->set('Cross-Origin-Embedder-Policy',
      'require-corp');
  }
}
.htaccess
.htaccessFallback
# .htaccess — Cross-Origin Headers
<IfModule mod_headers.c>
  Header always set Cross-Origin-Opener-Policy "same-origin"
  Header always set Cross-Origin-Resource-Policy "same-origin"
  Header always set Cross-Origin-Embedder-Policy "require-corp"
</IfModule>

Verifizierung

Alle drei Cross-Origin-Header müssen in der Response erscheinen. Testen Sie besonders Seiten mit externen Ressourcen.

TerminalVerifizierung
# Cache leeren und Header prüfen
drush cr
curl -sI https://ihre-domain.de | grep -i cross-origin

# Erwartete Ausgabe:
# cross-origin-opener-policy: same-origin
# cross-origin-resource-policy: same-origin
# cross-origin-embedder-policy: require-corp

Häufige Fehler

COEP blockiert externe Ressourcen

require-corp blockiert alle Cross-Origin-Ressourcen ohne explizites CORP. YouTube-Embeds, Google Fonts und externe Bilder funktionieren nicht mehr. Starten Sie mit credentialless statt require-corp oder verzichten Sie zunächst auf COEP.

Views-Modul lädt externe Ressourcen

Drupal Views können externe Bilder oder Medien einbinden. Mit aktivem COEP werden diese blockiert. Prüfen Sie alle Views auf externe Ressourcen-Referenzen.

EventSubscriber nicht registriert

Ohne korrekte services.yml wird der EventSubscriber nicht geladen. Prüfen Sie Dateiname, Namespace und Tag. drush cr nach jeder Änderung.

Media-Modul bricht mit CORP: same-origin

Drupals Media-Modul lädt oEmbed-Daten von externen Diensten. Mit CORP: same-origin werden diese Requests blockiert. Setzen Sie CORP für /media/oembed-Pfade auf cross-origin.

Compliance-Relevanz

Cross-Origin Headers schützen gegen Spectre-basierte Seitenkanalangriffe und erzwingen Browser-seitige Prozess-Isolation zwischen Origins.

NIS2Art. 21(e) — Sicherheit bei Entwicklung und Wartung von Informationssystemen
BSIAPP.3.1 — Webserver-Absicherung gegen Seitenkanalangriffe

Zusammenfassung

Cross-Origin Headers in Drupal erfordern einen Custom EventSubscriber, da seckit diese Header nicht unterstützt. Starten Sie vorsichtig: Setzen Sie zunächst nur COOP und CORP und testen Sie die Auswirkungen auf Views, Media-Modul und externe Embeds. COEP mit require-corp kann externe Ressourcen blockieren — verwenden Sie alternativ credentialless.

Wie steht Ihre Domain bei Cross-Origin Headers?

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