Zum Inhalt
Website-Checkvon pandaworks

← Alle Punkte · Sicherheit

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: SAMEORIGIN

Weiterfü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