Was der Schutz vor Clickjacking macht
Der Schutz vor Clickjacking verbietet fremden Websites, deine Seite in einem Rahmen einzubetten. So kann niemand Besucher zu Klicks verleiten, die sie gar nicht sehen.
So funktioniert es
Beim Clickjacking lädt eine fremde Seite deine Seite unsichtbar in einen Rahmen (einen iframe) und legt etwas Harmloses darüber, etwa einen „Gewinn abholen“-Knopf. Wer darauf klickt, klickt in Wahrheit auf deine Seite: bestätigt eine Bestellung, ändert eine Einstellung oder gibt eine Freigabe, ohne es zu merken. Weil der Besucher bei dir angemeldet ist, gilt der Klick.
Der Schutz besteht darin, dass deine Seite dem Browser sagt, wer sie einbetten darf. Dafür gibt es zwei Header:
frame-ancestorsist eine Direktive der Content Security Policy.'self'erlaubt nur die eigene Seite,'none'niemanden, dazu kannst du einzelne Adressen nennen.X-Frame-Optionsist der ältere Header mit den WertenDENY(niemand) undSAMEORIGIN(nur die eigene Seite).
Kennt ein Browser frame-ancestors, hat das Vorrang vor X-Frame-Options.
Worauf es ankommt
- Mindestens einer der beiden. Fehlen beide, darf jede Seite deine Seite einbetten.
- Keine Platzhalter in
frame-ancestors.*,https:oderhttp:erlauben wieder jede Seite. - Kein
ALLOW-FROM. Diesen Wert vonX-Frame-Optionskennen aktuelle Browser nicht mehr und ignorieren den ganzen Header. Wer bestimmte Partner einbetten lassen will, nennt sie inframe-ancestors. - Eindeutige Werte. Steht
X-Frame-Optionsmehrfach mit widersprüchlichen Werten in der Antwort, etwa einmal vom Webserver und einmal von der Anwendung, ignorieren Browser ihn. - Nur als Header.
frame-ancestorswirkt nicht, wenn die Policy in einem<meta>-Tag im HTML steht.
So richtest du es ein
Der einfache Weg:
X-Frame-Options: SAMEORIGIN
Der moderne Weg, als eigene Policy oder als Teil deiner bestehenden:
Content-Security-Policy: frame-ancestors 'self'
Sollen Partner deine Seite einbetten dürfen, nenne sie dort: frame-ancestors 'self' https://partner.example. Beide Header werden im Webserver oder in der Anwendung gesetzt, von dir, deiner Agentur oder über eine Header-Regel beim Hoster oder CDN. Viele CMS-Sicherheits-Plugins haben dafür einen Schalter.