Clickjacking is een kwaadaardige aanval waarbij gebruikers worden misleid om op links of UI-elementen te klikken op een site die een vertrouwde en bekende site lijkt. Dit wordt doorgaans bereikt door een deel of de gehele vertrouwde site in de kwaadaardige site in te sluiten met behulp van een <iframe>
.
De X-Frame-Options
(XFO)-header en de frame-ancestors
richtlijn in de Content-Security-Policy
(CSP)-header kunnen clickjacking-aanvallen beperken door te bepalen hoe een site kan worden ingesloten in een <iframe>
.
Hoe de Lighthouse-audit mislukt
De audit zal slagen als de XFO-header is ingesteld met SAMEORIGIN
of DENY
, of als de frame-ancestors
-richtlijn is ingesteld op de CSP-header. De audit mislukt als geen van deze framecontrolebeleidsregels is geconfigureerd.
Hoe u een framecontrolebeleid instelt om clickjacking tegen te gaan
Er moet een framecontrolebeleid worden ingesteld op de HTTP-headers van de initiële documentaanvraag. De X-Frame-Options
header en de frame-ancestors
-richtlijn in Content-Security-Policy
werken niet als ze zijn ingesteld op een <meta>
-element.
XFO-koptekst
Als u DENY
of SAMEORIGIN
instelt voor de XFO-header, worden clickjacking-aanvallen verminderd:
X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY
De SAMEORIGIN
-richtlijn staat toe dat de pagina alleen wordt weergegeven als alle voorouderframes dezelfde oorsprong hebben als de pagina zelf. Omgekeerd verhindert de DENY
-richtlijn dat de pagina in een frame wordt weergegeven, ongeacht de oorsprong van het bovenliggende frame.
CSP-kop
De frame-ancestors
-richtlijn binnen de CSP-header definieert welke sites de gegeven pagina mogen insluiten in een <frame>
, <iframe>
, <object>
of <embed>
. Net als bij XFO kan de CSP frame-ancestors
-richtlijn worden gebruikt om clickjacking-aanvallen te verminderen door deze in te stellen op self
of none
:
Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';
De frame-ancestors
richtlijn is echter flexibeler dan XFO omdat deze specifieke bovenliggende bronnen kan instellen die de pagina kunnen insluiten:
Content-Security-Policy: frame-ancestors 'self' https://example.com;