O novo HTML 5 está sendo desenvolvido pela WhatWG juntamente com a W3C. Durante o desenvolvimento uma das coisas mais significantes que foi alterada é o sandbox de segurança dos iframes. Sandbox que pode ser usado para isolar determinados operações de conteúdos não confiáveis em um iframe.
Ian Hickson o editor da especificação HTML 5, explica quais operações podemos evitar utilizando o os benefícios do sandbox:
- Acesso ao DOM da página pai (tecnicamente falando, porque o iframe é relegado a uma origem "diferente" do que da página principal)
- Executar scripts
- Inserir seus próprios forms, ou manipular forms via script
- ler ou escrever cookies, dados locais, ou base de dados SQL locais
Essas vantagens já podemos considerar como grandes avanços, porém olhando algumas novas novidades do HTML 5, podemos observar mais alguma mudanças e características significativas:
- Desabilitar plugin
- Desabilitar a navegação de outros contextos de browsers
- Desabilitar popups e dialogs modal
Sempre que pensamos em iframes, pensando em possíveis brechas de segurança, isso porque iframes são na maioria das vezes usados para colocar conteúdos de terceiros na página que podem de alguma maneira executar ações que não são esperadas. A grande sacada do Sandbox é proteger a página onde um iframe é adicionado, de maneira que ele diz o que o conteúdo do iframe pode fazer ou não.
O conteúdo envolvido pelo sandbox é separado do conteúdo da página onde está o iframe, obtendo menos privilégios. Podemos usar o sandbox utilizando seu MIME type text/html-sandboxed
. Hickson fala mais sobre esse MIME type:
O MIME type
text/html-sandboxed
, usado para garantir que usuários não podem navegar por conteúdos inconfiáveis. Existem duas partes para isso. Primeiro, os browsers não podem renderizar que servidas com o MIME typetext/html-sandboxed
, se você navegar para a página diretamente. Esta parte funciona em todos os browsers, hoje; todos fazem download (ou se oferecem para fazer download) da página marcada ao invés de renderizá-la. Segundo, browsers que suportam o atributo sandbox precisam renderizar iframes servidos com o MIME typetext/html-sandboxed
(sujeito a restrições de privilégios listados no atributo sandbox). Nenhum browser suporta isso ainda, nem mesmo o Google Chrome (ele renderiza a página pai, mas faz download do conteúdo do iframe ao invés de renderizá-lo no frame). Portanto, você ainda não pode usar esta técnica, até que o Google atualiza o Chrome para suportar isso. (Em teoria, outros browser implementarão o suporte a isso ao mesmo tempo que desenvolvem o suporte ao atributo sandbox, mas eu suponho que nós teremos que esperar e ver.)
Somente o Google Chrome tem suporte ao atributo sandbox atualmente. Browser como Safari, Firefox, IE* ou opera ainda não dao suporte, mas provavelmente quando lançarem suas respectivas versões novas, eles darão suporte. Neste caso não teremos o mesmo problema que estão tendo em relação a tag <video> que no Chrome utliza um padrão e em outros browser utilizam outro padrão. No caso do atributo sandbox cada browser será livre para escolher como implementar isso internamente. Pode ser que alguns browsers não implementem isso. Neste caso deveríamos tomar os mesmo cuidados que tomávamos antes em relação a segurança quanto ao uso de iframes.
Hoje em dia o uso de iframe ainda é comum? O que você acha da nova maneira de fazermos segurança em relação a iframes?