Mitigar clickjacking com XFO ou CSP

O clickjacking é um ataque malicioso em que os usuários são enganados para clicar em links ou elementos da interface em um site que parece ser confiável e conhecido. Isso geralmente é feito incorporando parte ou todo o site confiável no site malicioso usando um <iframe>.

O cabeçalho X-Frame-Options (XFO) e a diretiva frame-ancestors no cabeçalho Content-Security-Policy (CSP) podem reduzir os ataques de clickjacking controlando como um site pode ser incorporado em um <iframe>.

Como a auditoria do Lighthouse falha

A auditoria será aprovada se o cabeçalho XFO estiver definido com SAMEORIGIN ou DENY ou se a diretiva frame-ancestors estiver definida no cabeçalho CSP. A auditoria vai falhar se nenhuma dessas políticas de controle de frame estiver configurada.

Alerta do relatório do Lighthouse de que nenhum cabeçalho de resposta CSP ou XFO foi encontrado para mitigar o clickjacking.
Aviso do relatório do Lighthouse de que nenhum cabeçalho de resposta CSP ou XFO foi encontrado para mitigar o clickjacking.

Como definir uma política de controle de frame para reduzir o clickjacking

Uma política de controle de frame precisa ser definida nos cabeçalhos HTTP da solicitação inicial do documento. O cabeçalho X-Frame-Options e a diretiva frame-ancestors no Content-Security-Policy não vão funcionar se forem definidos em um elemento <meta>.

Cabeçalho XFO

A definição de DENY ou SAMEORIGIN para o cabeçalho XFO vai reduzir os ataques de clickjacking:

X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY

A diretiva SAMEORIGIN permite que a página seja exibida somente se todos os frames ancestrais tiverem a mesma origem que a página. Por outro lado, a diretiva DENY impede que a página seja mostrada em um frame, independentemente da origem do frame pai.

Cabeçalho CSP

A diretiva frame-ancestors no cabeçalho do CSP define quais sites podem incorporar a página em um <frame>, <iframe>, <object> ou <embed>. Assim como o XFO, a diretiva frame-ancestors do CSP pode ser usada para reduzir ataques de clickjacking, definindo-a como self ou none:

Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';

No entanto, a diretiva frame-ancestors é mais flexível que a XFO porque pode definir fontes mãe específicas que podem incorporar a página:

Content-Security-Policy: frame-ancestors 'self' https://example.com;

Recursos