Clickjacking
Clickjacking ist ein Angriff, bei dem eine echte Website unsichtbar über eine präparierte Seite gelegt wird, sodass Besucher unbemerkt auf verdeckte Schaltflächen klicken – und damit Aktionen auslösen, die sie nicht beabsichtigt haben.
Clickjacking ist ein Rahmen-basierter Angriff und wird über die CSP-Direktive frame-ancestors oder den X-Frame-Options-Header abgewehrt.
In einfachen Worten
Beim Clickjacking bettet ein Angreifer eine fremde, echte Website in einen unsichtbaren Rahmen ein und legt sie über seine eigene, präparierte Seite. Der Besucher sieht eine harmlose Oberfläche – etwa einen Gewinnspiel-Knopf – klickt aber in Wahrheit auf eine darunterliegende Schaltfläche der eingebetteten Seite, zum Beispiel „Bestätigen" oder „Zustimmen". So lassen sich Aktionen im angemeldeten Kontext des Opfers auslösen, ohne dass es etwas merkt. Der Name leitet sich daraus ab, dass der Klick „entführt" wird. Abgewehrt wird Clickjacking dadurch, dass eine Seite dem Browser verbietet, sie überhaupt in fremde Rahmen einzubetten – über die Direktive frame-ancestors einer Content-Security-Policy oder den älteren X-Frame-Options-Header.
Wozu brauche ich das?
Wichtig für jede Seite, auf der angemeldete Nutzer Aktionen mit Folgen auslösen – Bestell-Bestätigungen, Einstellungs-Änderungen, Zustimmungen. Reine Inhalts-Seiten ohne solche Aktionen sind weniger gefährdet, sollten die Einbettung aber trotzdem unterbinden, weil das ohne Nachteil möglich ist. Wie eine Auslieferung über HTTPS gehört der Schutz zum erwarteten Standard.
Beispiel aus der Praxis
Ein Angreifer baut eine Seite mit einem auffälligen Knopf und legt darüber – unsichtbar – die Konto-Einstellungen eines Dienstes, bei dem das Opfer angemeldet ist. An der Stelle des sichtbaren Knopfes liegt in der eingebetteten Seite die Schaltfläche „Berechtigung erteilen". Klickt das Opfer, erteilt es unbemerkt die Berechtigung. Hätte der Dienst die Einbettung per frame-ancestors unterbunden, hätte der Browser das Laden in den Rahmen verweigert und der Angriff wäre ins Leere gelaufen. Vergleichbar zu einem erzwungenen HSTS wirkt die Regel verbindlich auf Server-Seite.
Wirtschaftlicher Nutzen
Der Schutz vor Clickjacking ist mit einer einzigen Header-Regel umgesetzt und kostet faktisch nichts – weder Lizenz noch laufenden Aufwand. Ohne ihn riskiert ein Betreiber, dass seine angemeldeten Nutzer zu ungewollten Aktionen verleitet werden, mit entsprechendem Schaden für Vertrauen und möglicher Haftung. Als Standard-Prüfpunkt in Sicherheits-Audits gehört die Absicherung zum erwarteten Sorgfalts-Niveau.
Typische Fehler
- Die Einbettung in fremde Rahmen gar nicht unterbinden – die Voreinstellung der Browser erlaubt sie.
- Sich allein auf den älteren X-Frame-Options-Header verlassen, der nur einfache Fälle abdeckt.
- frame-ancestors zu locker setzen und damit fremde Einbettung doch wieder zulassen.
- Eigene, gewollte Einbettungen (etwa in ein Partner-Portal) beim Setzen der Regel übersehen.
Worauf achten?
- Die Einbettung über frame-ancestors in der Content-Security-Policy regeln – das ist die moderne, flexiblere Variante.
- Den X-Frame-Options-Header zusätzlich für ältere Browser setzen.
- Nur die wirklich benötigten eigenen Einbettungen erlauben, alles andere verbieten.
- Nach Relaunches prüfen, ob die Schutz-Regel noch gesetzt ist – sie geht bei Umbauten leicht verloren.
Häufig gestellte Fragen
Was ist Clickjacking?
Ein Angriff, bei dem eine echte Website unsichtbar in einen Rahmen gelegt und über eine präparierte Seite geblendet wird. Der Besucher klickt scheinbar auf eine harmlose Oberfläche, tatsächlich aber auf eine verdeckte Schaltfläche der eingebetteten Seite.
Wie verhindert man Clickjacking?
Indem man dem Browser verbietet, die Seite in fremde Rahmen einzubetten – über die Direktive frame-ancestors einer Content-Security-Policy oder den älteren X-Frame-Options-Header.
Was ist der Unterschied zwischen frame-ancestors und X-Frame-Options?
X-Frame-Options ist der ältere Header und deckt nur einfache Fälle ab. frame-ancestors ist die modernere Direktive der Content-Security-Policy und erlaubt feiner abgestufte Regeln, etwa das gezielte Zulassen einzelner eigener Domains.