Le clickjacking est une attaque malveillante qui consiste à inciter les utilisateurs à cliquer sur des liens ou des éléments d'interface utilisateur sur un site qui semble être fiable et familier. Pour ce faire, il est généralement nécessaire d'intégrer une partie ou la totalité du site de confiance dans le site malveillant à l'aide d'un <iframe>
.
L'en-tête X-Frame-Options
(XFO) et la directive frame-ancestors
dans l'en-tête Content-Security-Policy
(CSP) peuvent atténuer les attaques par hameçonnage de clic en contrôlant la manière dont un site peut être intégré dans un <iframe>
.
Pourquoi l'audit Lighthouse échoue-t-il ?
L'audit est concluant si l'en-tête XFO est défini avec SAMEORIGIN
ou DENY
, ou si la directive frame-ancestors
est définie sur l'en-tête CSP. L'audit échouera si aucune de ces règles de contrôle des trames n'est configurée.
Définir une règle de contrôle des cadres pour limiter le hameçonnage par clic
Une stratégie de contrôle des cadres doit être définie sur les en-têtes HTTP de la requête de document initiale. L'en-tête X-Frame-Options
et l'instruction frame-ancestors
dans Content-Security-Policy
ne fonctionneront pas s'ils sont définis sur un élément <meta>
.
En-tête XFO
Définir DENY
ou SAMEORIGIN
pour l'en-tête XFO permet de limiter les attaques par hameçonnage de clics:
X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY
La directive SAMEORIGIN
ne permet l'affichage de la page que si tous les cadres ancêtres partagent la même origine que la page elle-même. À l'inverse, la directive DENY
empêche l'affichage de la page dans un frame, quelle que soit l'origine du frame parent.
En-tête CSP
La directive frame-ancestors
dans l'en-tête du fichier CSP définit les sites pouvant intégrer la page donnée dans un <frame>
, <iframe>
, <object>
ou <embed>
. Comme pour XFO, la directive frame-ancestors
du CSP peut être utilisée pour atténuer les attaques de détournement de clic en la définissant sur self
ou none
:
Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';
Toutefois, la directive frame-ancestors
est plus flexible que XFO, car elle peut définir des sources parentes spécifiques pouvant intégrer la page:
Content-Security-Policy: frame-ancestors 'self' https://example.com;