Segurança de iframe: clickjacking e X-Frame-Options
Evite ataques de clickjacking com X-Frame-Options e CSP.
Segurança de iframe: clickjacking e X-Frame-Options é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.
O que é sequestro de cliques?
O sequestro de cliques (clickjacking) incorpora um site-alvo em um iframe transparente sobre uma página chamariz. O usuário pensa que está clicando no chamariz, mas na verdade clica na página autenticada oculta abaixo — executando ações no site-alvo sem saber.
Mecânica de um ataque de sequestro de cliques
O invasor carrega victim.com em um iframe transparente posicionado sobre um botão "Clique para ganhar!". Quando o usuário clica, na verdade clica no botão "Excluir conta" de victim.com — autenticado como ele próprio pelo cookie de sessão de victim.com. Não é necessário phishing.
Cabeçalho X-Frame-Options
X-Frame-Options: DENY impede que a página seja carregada em qualquer iframe. X-Frame-Options: SAMEORIGIN permite a incorporação em iframe somente por páginas da mesma origem. Defina esse cabeçalho no servidor em todas as páginas autenticadas para impedir o sequestro de cliques.
Content-Security-Policy frame-ancestors
Content-Security-Policy: frame-ancestors 'none' é a substituição moderna e mais flexível de X-Frame-Options: DENY. frame-ancestors 'self' substitui SAMEORIGIN. frame-ancestors também pode permitir origens confiáveis específicas: frame-ancestors https://trusted.example.com.
Quebra de quadros com JavaScript
A técnica legada de quebra de quadros usava JavaScript para sair dos quadros. Ela é facilmente derrotada pelo atributo sandbox (que bloqueia o script de quebra de quadros). Sempre use cabeçalhos no servidor (X-Frame-Options ou CSP frame-ancestors) — a quebra de quadros com JavaScript não é confiável.
Quando permitir a incorporação em quadros
Casos de uso legítimos para incorporação em quadros: incorporar o seu próprio conteúdo na sua própria origem (SAMEORIGIN) e permitir que um parceiro específico incorpore o seu widget (frame-ancestors com uma origem específica). Crie a política para permitir esses casos e negar todos os outros.
Abordagem combinada
Defina X-Frame-Options (para navegadores mais antigos) e CSP frame-ancestors (para navegadores modernos) para obter a maior cobertura possível. Quando ambos estão presentes, frame-ancestors tem precedência nos navegadores compatíveis com CSP. Enviar ambos garante proteção contra sequestro de cliques em todos os agentes de usuário.
Riscos de iframes da mesma origem
Até mesmo iframes da mesma origem podem representar riscos: um XSS armazenado em uma página incorporada poderia acessar a página pai por meio de parent.document se estivesse na mesma origem. Use sandbox sem allow-same-origin nos iframes da mesma origem que não precisam acessar a página pai, para limitar os danos causados por vulnerabilidades no conteúdo incorporado.
Testando a sua proteção
Verifique a proteção contra sequestro de cliques: use a aba de rede do navegador para conferir nos cabeçalhos da resposta a presença de X-Frame-Options ou CSP frame-ancestors. Ferramentas como securityheaders.com analisam os cabeçalhos. Crie uma página HTML de teste com um iframe apontando para o seu site e verifique se ele não é carregado.
Incorporações de terceiros
Ao incorporar conteúdo de terceiros (YouTube, Google Maps), o seu site é o site que cria o quadro — certifique-se de que o serviço incorporado permita a incorporação na própria política X-Frame-Options. Não é possível incorporar um site que impeça a incorporação — isso é intencional e protege os usuários do serviço incorporado.
CSP frame-ancestors em metatags
Ao contrário da maioria das diretivas CSP, frame-ancestors não pode ser definido por meio de uma metatag HTTP-equiv — ele deve ser enviado como um cabeçalho de resposta HTTP. Isso impede que invasores removam a proteção manipulando o HTML incorporado antes que o navegador leia as metatags.
Verificação de conhecimentos
Por que o código de quebra de quadros com JavaScript é uma defesa não confiável contra o sequestro de cliques?
Resumo
O sequestro de cliques incorpora páginas autenticadas em iframes transparentes para sequestrar cliques. Defesa: cabeçalhos no servidor X-Frame-Options: DENY ou CSP frame-ancestors: none. Defina ambos para obter cobertura entre navegadores. A quebra de quadros com JavaScript não é confiável — use sempre cabeçalhos HTTP. frame-ancestors oferece uma lista de permissões detalhada de origens confiáveis que X-Frame-Options não oferece.
Perguntas Frequentes
A aula “Segurança de iframe: clickjacking e X-Frame-Options” é grátis?
Sim — o texto completo de “Segurança de iframe: clickjacking e X-Frame-Options” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.
O que vou aprender em “Segurança de iframe: clickjacking e X-Frame-Options”?
Evite ataques de clickjacking com X-Frame-Options e CSP. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar HTML Academy?
Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Segurança de iframe: clickjacking e X-Frame-Options”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de HTML Academy?
Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O elemento iframe: src e sandbox
- Segurança de iframe: clickjacking e X-Frame-Options
- Os elementos embed e object
- Carregamento tardio de iframes