problemas de conteúdo misto surgem quando os sites entregam suas páginas em HTTPS, mas permitem que alguns dos recursos sejam entregues em texto simples. O invasor de rede ativo não pode fazer nada sobre o tráfego criptografado, mas mexer com o texto simples pode resultar em ataques que variam de phishing, no melhor dos casos, a comprometimento total do navegador, no pior. Um único script exposto é suficiente: o invasor pode sequestrar a conexão e injetar cargas úteis de ataque arbitrárias nela.
tendemos a falar muito sobre outros aspectos do SSL/TLS, mas o conteúdo misto é indiscutivelmente a maneira mais fácil de bagunçar completamente a criptografia do seu site.
nos primeiros dias da Web, todo o conteúdo misto era permitido; os navegadores da web esperavam que os operadores do site pensassem nas consequências da mistura de conteúdo. Isso, é claro, não resultou com grande segurança. Os operadores do Site fizeram o que precisavam para fazer seu trabalho e diminuir os custos. Somente nos últimos anos os fornecedores de navegadores começaram a prestar atenção e a restringir o conteúdo misto.
hoje, quase todos os principais navegadores tendem a dividir o conteúdo misto em duas categorias: passivo para imagens, vídeos e som; e ativopara recursos mais perigosos, como scripts. Eles tendem a permitir conteúdo misto passivo por padrão, mas rejeitam conteúdo ativo. Este é claramente um compromisso entre quebrar a Web e segurança razoável.
o Internet Explorer tem sido o líder no manuseio seguro de conteúdo misto. Já no Internet Explorer 5 (de acordo com este post), eles tinham detecção e prevenção de conteúdo inseguro por padrão. O Chrome começou a bloquear por padrão em 2011 e o Firefox em 2013. O navegador Android padrão e o Safari, no entanto, ainda permitem todo o conteúdo misto sem restrições (e com avisos quase inexistentes).
Aqui estão os resultados dos meus testes recentes de qual conteúdo inseguro é permitido por padrão:
Navegador | Imagens | CSS | Scripts | XHR | WebSockets | Quadros |
---|---|---|---|---|---|---|
o browser do Android 4.4.x | Sim | Sim | Sim | Sim | Sim | Sim |
Chrome 33 | Sim | Não | Não | Sim | Sim | Não |
Firefox 28 | Sim | Não | Não | Não | Não | Não |
Internet Explorer 11 | Sim | Não | Não | Não | Não | Não |
Safari 7 | Sim | Sim | Sim | Sim | Sim | Sim |
Eles são, principalmente, esperando, mas há uma surpresa com o Chrome que bloqueia o active o conteúdo da página, mas ainda permite que o texto simples XMLHttpRequest e conexões WebSocket.
vale ressaltar que a tabela não nos conta tudo. Por exemplo, os navegadores tendem a não controlar o que seus plug-ins fazem. Além disso, certos componentes (por exemplo, Flash ou Java) são ambientes completos por direito próprio, e há pouco que os navegadores podem fazer para garantir a segurança.
testes para manipulação de conteúdo misto em laboratórios SSL
para facilitar a avaliação do tratamento do navegador desse problema, recentemente estendi o teste do cliente SSL Labs para sondar o manuseio de conteúdo misto. Quando você visita a Página, seu navegador de usuário é testado e você obterá resultados semelhantes a estes:
prevalência de conteúdo misto
Anecdotally, conteúdo misto é muito comum. Na Qualys, investigamos esse problema em 2011, juntamente com vários outros problemas no nível do aplicativo que resultam na quebra total da criptografia em aplicativos da web. Analisamos as páginas iniciais de cerca de 250.000 sites seguros da lista Alexa top 1 million e determinamos que 22,41% deles usavam conteúdo inseguro. Se as imagens forem excluídas, o número cai para 18,71%.
um estudo mais detalhado de 18.526 sites extraídos do Alexa top 100.000 ocorreu em 2013: uma mistura perigosa: análise em larga escala de sites de conteúdo misto (Chen et al.). Para cada site, foram analisadas até 200 páginas seguras, chegando a um total de 481.656 páginas. Seus resultados indicam que até 43% dos sites têm problemas de conteúdo misto.
mitigação
a melhor defesa contra problemas de conteúdo misto é simplesmente não ter esse tipo de problema em seu código. Mas isso é facilmente dito do que feito; há muitas maneiras pelas quais o conteúdo misto pode surgir. Quando isso falha, existem duas tecnologias que podem ser úteis:
- HTTP Strict Transport Security (HSTS) é um mecanismo que impõe a recuperação segura de recursos, mesmo diante de erros do Usuário (tentativa de acessar seu site na porta 80) e erros de implementação (seus desenvolvedores colocam um link inseguro em uma página segura). O HSTS é uma das melhores coisas que aconteceram com o TLS recentemente, mas funciona apenas nos nomes de host que você controla.
- a Política de segurança de conteúdo (CSP) pode ser usada para bloquear a recuperação insegura de recursos de sites de terceiros. Ele também tem muitos outros recursos úteis para resolver outros problemas de segurança do aplicativo, por exemplo, XSS.