Iframes e Riscos de Embed
O elemento <iframe> permite incorporar um documento HTML dentro de outro. Embora seja útil, ele introduz riscos significativos de segurança se não for gerenciado corretamente.
Principais Riscos
- Clickjacking: Um site malicioso pode sobrepor um iframe invisível da sua aplicação para enganar o usuário a clicar em algo que ele não pretendia (ex: excluir conta).
- Navegação Não Autorizada: Um site dentro de um iframe pode tentar redirecionar a janela pai (top-level navigation) para um site malicioso.
- Vazamento de Dados: Se a segurança não for configurada, o site pai e o site filho podem tentar trocar informações indevidamente.
Como fazer vs Como não fazer
✅ Como fazer
- Sempre utilize o atributo
sandboxem iframes para aplicar o princípio do privilégio mínimo:html<!-- Permite scripts e formulários, mas impede acesso a cookies do pai ou navegação do pai --> <iframe src="https://third-party.com" sandbox="allow-scripts allow-forms"></iframe> - Utilize o cabeçalho
X-Frame-Optionsou a diretivaframe-ancestorsdo CSP para impedir que seu site seja incorporado por domínios não autorizados (proteção contra Clickjacking). - Utilize o atributo
referrerpolicy="no-referrer"se não quiser que o site dentro do iframe saiba de onde o usuário veio.
❌ Como não fazer
- Nunca use iframes sem o atributo
sandboxao carregar conteúdo de terceiros ou conteúdo gerado por usuários. - Não incorpore sites que não utilizam HTTPS.
- Não permita permissões desnecessárias no atributo sandbox (ex: evite
allow-same-originse o conteúdo for de uma fonte não confiável, pois isso permite que o iframe acesse os cookies do próprio domínio se ele estiver na mesma origem). - Evite o uso de iframes para funcionalidades críticas de segurança (como telas de login) se houver alternativas mais seguras, como redirecionamentos ou modais controlados pela própria aplicação.