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;