Schutz vor Einbettung (Clickjacking)
Was geprüft
Geprüft wird, ob die Seite festlegt, wer sie in einem Rahmen (iframe) einbetten darf: über die CSP-Direktive frame-ancestors als Kopfzeile (ohne *) oder über X-Frame-Options mit DENY oder SAMEORIGIN. frame-ancestors in einer <meta>-CSP zählt nicht, weil der Browser die Direktive dort ignoriert. ALLOW-FROM und ungültige Werte gelten als nicht gesetzt.
Wie relevant
Niedrig, wenn kein wirksamer Schutz gesetzt ist, weil der Angriff (Clickjacking) eine präparierte fremde Seite und eine Seite mit lohnenden Klickaktionen voraussetzt; für Seiten mit Anmeldung oder Formularen wiegt er schwerer.
Warum
Beim Clickjacking bettet eine fremde Seite Ihre Seite unsichtbar ein und verleitet Besucher dazu, dort ungewollt zu klicken, etwa auf „Absenden“ oder „Löschen“ in einem angemeldeten Bereich. Eine Einbettungsregel verhindert das.
Wie beheben
Setzen Sie die CSP-Direktive frame-ancestors 'self' als Kopfzeile und für ältere Browser zusätzlich X-Frame-Options: SAMEORIGIN. Darf ein bestimmter Partner Ihre Seite einbetten, nennen Sie seinen Ursprung in frame-ancestors; X-Frame-Options kennt dafür keinen Wert.
Nebenwirkung: Seiten, die Sie bewusst auf anderen Domains einbetten (Buchungs- oder Formular-Widgets, Vorschauen in externen Werkzeugen), funktionieren danach nur noch, wenn deren Ursprung in frame-ancestors steht. Prüfen Sie vorher, wo Ihre Seiten eingebettet werden; die Browserkonsole meldet blockierte Einbettungen.
WordPress: Der WordPress-Customizer bettet die Seite auf derselben Domain ein und funktioniert mit SAMEORIGIN bzw. 'self'. Sicherheits- und Cache-Plugins schreiben die .htaccess oft selbst um und können eigene Kopfzeilen dabei entfernen oder doppelt setzen. Setzen Sie Kopfzeilen deshalb an genau einer Stelle (Plugin oder .htaccess außerhalb der Plugin-Blöcke „# BEGIN … # END“) und prüfen Sie nach jedem Plugin-Update mit curl -I.
Codebeispiel
Apache (.htaccess)
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
# Falls noch keine CSP gesetzt ist; sonst frame-ancestors in die bestehende CSP aufnehmen
Header always set Content-Security-Policy "frame-ancestors 'self'"
</IfModule>nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always;Cloudflare (Transform Rule)
Rules → Transform Rules → Response Header Transform Rules
Aktion: Set static — Header: X-Frame-Options — Wert: SAMEORIGINWeiterführende Quellen
Quellen der Methodik
docs/SCORING.md— Status und Schweregrade (§2), Kategoriescore und Abdeckung (§3), Gesamtwert (§4), keine Doppelabzüge (§5), Prüfkatalog mit Gewichten (§6), Versionierung (§8), Formulierungsregeln (§9), bewusst nicht geprüft (§10)docs/KALIBRIERUNG.md— Abgleich der Schwerefaktoren und Kappen mit externen Ankern (Web Almanac, Lighthouse, MDN HTTP Observatory, SSL Labs), Entscheidung scoring@1.4.0