Verhinderung von Clickjacking
Die Content Security Policy-Direktive frame-ancestors
und der X-Frame-Options
-Header bieten Kontrolle darüber, wie Ihre Seite innerhalb eines <iframe>
auf einer anderen Seite eingebettet werden darf. Diese Funktionen helfen, Clickjacking zu verhindern.
Problem
Bei einem Clickjacking-Angriff täuscht ein Angreifer einen Benutzer dazu, mit einer vertrauenswürdigen Seite in einer Art und Weise zu interagieren, die nicht beabsichtigt war.
Typischerweise erstellt der Angreifer eine Lockvogel-Seite, die die vertrauenswürdige Seite des Benutzers in einem <iframe>
-Element einbettet. Die Seite des Angreifers verbirgt das <iframe>
und richtet einige Lockvogel-Elemente so aus, dass sie an derselben Stelle erscheinen wie Elemente auf der vertrauenswürdigen Seite, die sensible Aktionen ausführen. Wenn der Benutzer versucht, mit den Lockvogel-Elementen zu interagieren, interagiert er stattdessen unbeabsichtigt mit der vertrauenswürdigen Seite und könnte dazu gebracht werden, Handlungen auf der vertrauenswürdigen Seite vorzunehmen, die er nicht beabsichtigt hatte.
Weitere Details finden Sie unter Clickjacking.
Lösung
Die Hauptlösung gegen Clickjacking besteht darin, zu verhindern, dass die vertrauenswürdige Seite in einem <iframe>
eingebettet wird. Dafür gibt es zwei Header:
Content-Security-Policy: frame-ancestors
wird bevorzugt, da es eine feinere Kontrolle über das Einbetten von Seiten bietet. Es wird jedoch nicht in IE11 und früher, pre-Chromium-Versionen von Edge, Safari 9.1 (Desktop) und Safari 9.2 (iOS) unterstützt.X-Frame-Options
ist weniger granular, wird aber in der oben genannten älteren Browsergruppe unterstützt.
Es wird empfohlen, beide zu verwenden, es sei denn, Sie wissen, dass Sie die Unterstützung für die ältere Browsergruppe nicht benötigen.
Sie sollten alle Versuche, Ihre Seite einzubetten, ablehnen, es sei denn, dies ist unbedingt erforderlich. Wenn die Einbettung erforderlich ist, sollten Sie das minimale erforderliche Einbettungskontingent bereitstellen. Websites, die die Fähigkeit benötigen, in einem <iframe>
eingebettet zu werden, müssen JavaScript-Verteidigungen und eine robuste Content-Security-Policy
verwenden, um Clickjacking von bösartigen Ursprungsorten zu verhindern. Window.confirm()
kann als Teil Ihrer JavaScript-Verteidigungen verwendet werden, um den Benutzer über die Aktion zu informieren, die er ausführen möchte: Siehe window.confirm()
Protection.
Die äquivalenten Optionen für jede Einstellung sind wie folgt:
CSP-Wert | X-Frame-Options -Wert |
Beschreibung |
---|---|---|
frame-ancestors 'none' |
DENY |
Alle Einbettungsversuche verweigern. |
frame-ancestors 'self' |
SAMEORIGIN |
Nur gleichursprungsbasierte Einbettungsversuche zulassen. |
frame-ancestors https://example.org |
ALLOWFROM https://example.org |
Einbettungsversuche von der angegebenen Domain zulassen. |
Hinweis:
Die Syntax X-Frame-Options: ALLOWFROM https://example.org
ist veraltet, und die meisten Browser ignorieren sie. Es wird empfohlen, in solchen Fällen DENY
festzulegen und/oder sich auf das CSP-Äquivalent zu verlassen.
Hinweis:
Das Setzen von Cookies mit der SameSite
-Direktive ist auch in Clickjacking-Fällen nützlich, die davon abhängen, dass der Benutzer authentifiziert ist.
Beispiele
Blockieren Sie das Einbetten der Seite mit X-Frame-Options
und CSP:
Content-Security-Policy: frame-ancestors 'none'
X-Frame-Options: DENY
Erlauben Sie das Einbetten der Seite nur auf gleichursprungsbasierten Seiten:
Content-Security-Policy: frame-ancestors 'self'
X-Frame-Options: SAMEORIGIN
Erlauben Sie nur example.org
, die Seite einzubetten:
Content-Security-Policy: frame-ancestors https://example.org
# Block embedding in browsers that don't support CSP2
X-Frame-Options: DENY
Siehe auch
- Clickjacking
- Clickjacking Defense Cheat Sheet auf
owasp.org
- Clickjacking Attacks and How to Prevent Them auf
auth0.com
(2020)