Clickjacking-Schutz
Die Content Security Policy- Direktive frame-ancestors
und der Header X-Frame-Options
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 so erscheinen, als wären sie von einer vertrauten Website, die der Benutzer kennt. Dies wird normalerweise erreicht, 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-Feature wird dann über diesem Inhalt positioniert, um den Benutzer glauben zu lassen, dass er mit seiner vertrauten Website interagiert, während er tatsächlich 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 granulare Kontrolle über die Einbettung von Websites bietet. Es wird jedoch nicht in IE11 und früher, vor der Chromium-Version von Edge, Safari 9.1 (Desktop) und Safari 9.2 (iOS) unterstützt.X-Frame-Options
ist weniger granular, wird aber in dem oben genannten älteren Browser-Set unterstützt.
Die Empfehlung ist, beide zu verwenden, es sei denn, Sie wissen, dass Sie keine Unterstützung für das ältere Browser-Set benötigen.
Sie sollten alle Versuche, Ihre Website einzubetten, ablehnen, es sei denn, es ist wirklich erforderlich. Wenn eine Einbettung erforderlich ist, sollten Sie das minimale Erlaubnisniveau bereitstellen, das notwendig ist. Websites, die die Fähigkeit erfordern, in einem <iframe>
eingebettet zu werden, müssen JavaScript-Abwehrmechanismen und eine robuste Content-Security-Policy
verwenden, um Clickjacking von bösartigen Ursprüngen zu verhindern. Window.confirm()
kann als Teil Ihrer JavaScript-Abwehrmechanismen verwendet werden, um den Benutzer über die Aktion zu informieren, die er ausführt: 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 |
Alle Einbettungsversuche ablehnen. |
frame-ancestors 'self' |
SAMEORIGIN |
Nur gleichherige 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
zu setzen und/oder sich auf das CSP-Äquivalent zu verlassen.
Hinweis:
Das Setzen von Cookies mit der SameSite
-Direktive ist ebenfalls nützlich in Clickjacking-Fällen, die davon abhängen, dass der Benutzer authentifiziert ist.
Beispiele
Blockieren 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 gleichherigen Seiten eingebettet wird:
Content-Security-Policy: frame-ancestors 'self'
X-Frame-Options: SAMEORIGIN
Nur example.org
darf die Website einbetten:
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 Attacks and How to Prevent Them auf
auth0.com
(2020)