Clickjacking-Prävention
Die Content Security Policy Richtlinie frame-ancestors
und der X-Frame-Options
Header bieten Kontrolle darüber, wie Ihre Website innerhalb eines <iframe>
auf einer anderen Website eingebettet werden kann. Diese Funktionen helfen, Clickjacking zu verhindern.
Problem
Clickjacking ist ein Angriff, bei dem bösartige Websites Benutzer dazu verleiten, auf Links oder UI-Elemente zu klicken, indem sie diese so erscheinen lassen, als würden sie zu einer vertrauenswürdigen Website gehören, die dem Benutzer bekannt ist. Dies geschieht in der Regel, indem ein Teil oder die gesamte vertrauenswürdige Website über ein <iframe>
in die bösartige Website eingebettet wird. Ein Button, Link oder ein anderes UI-Element wird dann über diesem Inhalt positioniert, sodass der Benutzer denkt, er würde mit der vertrauenswürdigen Website interagieren, während er in Wirklichkeit mit der bösartigen Website interagiert.
Lösung
Verwenden Sie die HTTP-Header wie erforderlich:
Content-Security-Policy: frame-ancestors
wird bevorzugt, da es eine feinere Kontrolle über die Website-Einbettung bietet. Es wird jedoch nicht in IE11 und früheren Versionen, vor-Chromium-Versionen von Edge, Safari 9.1 (Desktop) und Safari 9.2 (iOS) unterstützt.X-Frame-Options
ist weniger granular, aber es wird in der älteren Browsersammlung unterstützt, die oben aufgeführt ist.
Es wird empfohlen, beide zu verwenden, es sei denn, Sie wissen, dass Sie keine Unterstützung für die ältere Browsersammlung benötigen.
Sie sollten alle Versuche, Ihre Website einzubetten, ablehnen, es sei denn, dies ist wirklich notwendig. Wenn eine Einbettung erforderlich ist, geben Sie die minimal notwendige Einbettungserlaubnis. Websites, die die Möglichkeit benötigen, in einem <iframe>
eingebettet zu werden, müssen JavaScript-Verteidigungen und eine robuste Content-Security-Policy
verwenden, um Clickjacking von bösartigen Ursprüngen zu verhindern. Window.confirm()
kann als Teil Ihrer JavaScript-Verteidigungen verwendet werden, um den Benutzer über die Aktion zu informieren, die er ausführen wird: Siehe window.confirm()
Protection.
Die entsprechenden Optionen für jede Einstellung sind wie folgt:
CSP-Wert | X-Frame-Options Wert |
Beschreibung |
---|---|---|
frame-ancestors 'none' |
DENY |
Lehnen Sie alle Einbettungsversuche ab. |
frame-ancestors 'self' |
SAMEORIGIN |
Erlauben Sie nur gleiche Ursprungs-Einbettungsversuche. |
frame-ancestors https://example.org |
ALLOWFROM https://example.org |
Erlauben Sie Einbettungsversuche von der angegebenen Domain. |
Hinweis: Die Syntax X-Frame-Options: ALLOWFROM https://example.org
ist veraltet, und die meisten Browser ignorieren sie. Es wird empfohlen, stattdessen DENY
zu setzen und/oder sich auf das CSP-Äquivalent zu verlassen.
Hinweis: Das Setzen von Cookies mit der SameSite
Direktive ist auch nützlich in Clickjacking-Fällen, die darauf angewiesen sind, dass der Benutzer authentifiziert ist.
Beispiele
Verhindern Sie die Einbettung der Website, indem Sie X-Frame-Options
und CSP verwenden:
Content-Security-Policy: frame-ancestors 'none'
X-Frame-Options: DENY
Erlauben Sie, dass die Website nur auf Seiten mit demselben Ursprung eingebettet wird:
Content-Security-Policy: frame-ancestors 'self'
X-Frame-Options: SAMEORIGIN
Erlauben Sie nur example.org
, die Website 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 Defense Cheat Sheet auf
owasp.org
- Clickjacking-Angriffe und wie man sie verhindert auf
auth0.com
(2020)