1001Ferramentas
🖼️ Segurança

Comparador X-Frame-Options vs frame-ancestors

Compara X-Frame-Options com a diretiva frame-ancestors do CSP e identifica conflitos ou redundâncias.

X-Frame-Options ou frame-ancestors: qual vale

Clickjacking funciona colocando a sua página dentro de um iframe invisível sobre outro conteúdo, de modo que o clique da pessoa caia no seu botão sem que ela perceba. As duas defesas contra isso são o cabeçalho X-Frame-Options, mais antigo, e a diretiva frame-ancestors da Content-Security-Policy, moderna. Quase todo site acaba com os dois configurados, e nem sempre com o mesmo valor.

Informe o que cada um está enviando e a página traduz o significado de cada valor e diz qual prevalece. A regra é simples: quando frame-ancestors está presente, o navegador moderno ignora o X-Frame-Options por completo. O XFO só continua valendo onde a CSP não é interpretada, o que hoje significa navegadores bem antigos. Configurar valores contraditórios não gera erro — gera comportamento diferente por navegador.

Vale conhecer as equivalências: DENY corresponde a frame-ancestors com nenhum, e SAMEORIGIN corresponde a frame-ancestors próprio. O que não tem equivalente é o ALLOW-FROM, que nunca funcionou direito e é ignorado por Chrome e Firefox — quem precisa liberar um parceiro específico só consegue isso com frame-ancestors, que aceita lista de origens.

Perguntas frequentes

Preciso manter os dois cabeçalhos?
Manter o XFO custa quase nada e cobre clientes antigos, então a prática comum é enviar os dois com valores equivalentes. O que não vale é enviar só XFO e achar que está moderno, nem enviar valores que se contradizem, porque aí o comportamento depende de qual dos dois o cliente entende.
Como libero só um parceiro para embutir minha página?
Com frame-ancestors seguido da origem dele, e apenas isso — ALLOW-FROM não é opção porque os navegadores atuais o descartam. Lembre que a diretiva aceita várias origens separadas por espaço, e que a comparação é por origem completa: esquema, host e porta.
A meta tag de CSP serve para isso?
Não. frame-ancestors é explicitamente ignorada quando a política vem por meta tag — a decisão de permitir o enquadramento acontece antes de o HTML ser processado. Essa diretiva só funciona no cabeçalho HTTP de verdade.

Ferramentas Relacionadas