Em minha postagem anterior, Encurtadores de url: Destruindo a Web desde 2002mencionei que um dos “recursos” da nova geração de serviços de encurtamento de URL é enquadrar o conteúdo de destino.
O Digg é um dos sites mais populares para implementar essa estratégia. Funciona da seguinte forma. Se o senhor estiver conectado ao Digg, cada link de destino que o senhor clica no Digg é um URL encurtado de sua própria criação. Se eu clicar em um artigo do Stack Overflow que outra pessoa tenha “Duggado”, serei enviado para este link.
Para os usuários conectados, todos os links de saída do Digg são enquadrados na “DiggBar”.. É uma forma de levar a experiência Digg com o usuário para onde quer que ele vá: enquanto lê o artigo alvo, o usuário pode votar nele, ver artigos relacionados, compartilhar e assim por diante. E se o senhor compartilhar esse URL abreviado com outros usuários, eles terão o mesmo comportamento, desde que também tenham um cookie de login do Digg.
A essa altura, os senhores devem estar esperando que eu fale sobre como a DiggBar é maligna e como ela também está destruindo a Web, etc., etc., etc., etc. Mas não consigo reunir a raiva indignada. Posso dar ao senhor, no máximo, ambivalência. Eis o motivo:
- A DiggBar não é exibida para a grande maioria dos usuários anônimos, mas apenas para os usuários que optaram pela experiência Digg ao se inscreverem.
- O nova diretiva rel=”canonical é usada nos links de destino para que os mecanismos de pesquisa possam saber quais links são os links “reais” e autorizados para o conteúdo. Eles não serão confundidos nem terão o suco do mecanismo de pesquisa diluído pelos URLs encurtados do Digg. Pelo menos, essa é a teoria.
- Nenhum anúncio do Digg é exibido por meio da DiggBar, portanto o conteúdo emoldurado não é “envolvido” por anúncios.
- Acredito que os próprios usuários do Digg podem optar por não usar a DiggBar por meio de uma configuração de preferências.
O Digg está tentando construir um negócio, assim como nós estamos com o Stack Overflow. Não posso culpá-los por seu desejo de estender um pouco a comunidade Digg para fora, considerando os zilhões de links de saída que eles fornecem ao mundo. Principalmente quando eles tentaram fazer isso de uma forma semi-ética, solicitando ativamente o feedback da comunidade ao longo do caminho.
Em resumo, o Digg não é o problema. Mas mesmo que o fosse — se o senhor não quiser ser enquadrado pela barra do DiggBar, ou por qualquer outro site, pode colocar o chamado JavaScript “frame-busting”. em suas páginas.
if (parent.frames.length > 0) { top.location.replace(document.location); }
Problema resolvido! Este código (ou as muitas variantes que quebram os quadros) faz funciona na barra do DiggBar. Mas nem todo site de enquadramento é tão respeitável quanto o Digg. O que acontece quando colocamos nossos hipotéticos chapéus pretos e começamos a projetando para o mal?
Vou dizer ao senhor o que acontece. Isso acontece.
var prevent_bust = 0 window.onbeforeunload = function() { prevent_bust++ } setInterval(function() { if (prevent_bust > 0) { prevent_bust -= 2 window.top.location = 'http://server-which-responds-with-204.com' } }, 1)Na maioria dos navegadores, um 204 (sem conteúdo) resposta HTTP não fará nada, ou seja, deixará o usuário na página atual. Mas a tentativa de solicitação substituirá a tentativa anterior de quebra de quadro, tornando-a inútil. Se o servidor responder rapidamente, isso será quase invisível para o usuário.
Quando a vida lhe servir limões, faça um canhão de limão. Produzir um canhão de limãorebentando JavaScript. Esse código faz o seguinte:
- incrementa um contador toda vez que o navegador tenta navegar para fora da página atual, por meio do
window.onbeforeonload
manipulador de eventos - configura um cronômetro que dispara a cada milissegundo por meio do
setInterval()
e, se o contador for incrementado, altera o local atual para um URL de controle do invasor - esse URL exibe uma página com código de status HTTP 204, que não faz com que o navegador navegue para nenhum lugar
Efeito líquido: frame-busting estragado. O que naturalmente pode levar o senhor a se perguntar… Ei, buster, o senhor pode acabar com o frame-busting buster? E, em caso afirmativo, onde isso termina?
No filme de 1998, O Grande Golpeem que os protagonistas sequestram a filha de um empresário japonês extremamente rico. Quando eles ligam para entregar o aviso de resgate, recorrem a Gump, que emprega uma marca chamada Trace Buster para impedir que a polícia rastreie a ligação.
Sem o conhecimento de Gump, o pai tem um Trace-Buster-Buster à sua disposição. Isso, por sua vez, faz com que Gump use seu Trace-Buster-Buster-Buster em uma batalha cada vez maior para evitar ser detectado.
O que é realmente assustador é que pelo que sei, não há solução. Devido às restrições de segurança de JavaScript entre domínios, é quase impossível para o site emoldurado bloquear ou interferir no JavaScript maligno da página pai que está bloqueando intencionalmente e de forma agressiva o framebusting.
Se um site maligno decidir enquadrar seu site, o senhor vai ser enquadrado. Período. O frame-busting nada mais é do que uma falsa sensação de segurança; ele não funciona. Essa foi uma revelação perturbadora para mim, porque o enquadramento é o primeiro passo no caminho para a clickjacking:
Uma página clickjacked induz o usuário a realizar ações indesejadas ao clicar em um link oculto. Em uma página clickjacked, os invasores mostram um conjunto de botões fictícios e, em seguida, carregam outra página sobre ela em uma camada transparente. Os usuários pensam que estão clicando nos botões visíveis, mas na verdade estão executando ações na página oculta. A página oculta pode ser uma página autêntica e, portanto, os invasores podem induzir os usuários a realizar ações que nunca tiveram a intenção de fazer, e não há como rastrear essas ações posteriormente, pois o usuário estava genuinamente autenticado na outra página.
Por exemplo, um usuário pode jogar um jogo em que precisa clicar em alguns botões, mas outra página autêntica, como um site de e-mail de um serviço popular, é carregada em um iframe oculto sobre o jogo. O iframe será carregado somente se o usuário tiver salvo a senha do respectivo site. Os botões do jogo são colocados de forma que suas posições coincidam exatamente com o botão selecionar todos os e-mails e, em seguida, com o botão excluir e-mail. A consequência é que o usuário, sem saber, exclui todos os e-mails de sua pasta enquanto joga um simples jogo. Outras explorações conhecidas foram enganar os usuários para que ativassem a webcam e o microfone por meio do flash (o que já foi corrigido pela Adobe), enganar os usuários para que tornassem públicas as informações de seus perfis em redes sociais, fazer com que os usuários seguissem alguém no Twitter etc.
Fui vítima de um leve exploit de clickjacking no próprio Twitter! Isso realmente acontece, e não é difícil de fazer.
Sim, o Digg faz o enquadramento de forma ética, de modo que seu frame-busting da DiggBar parecerá funcionar. Mas se o site de enquadramento for maligno, boa sorte. Quando o senhor se depara com um adversário determinado e habilidoso que deseja enquadrar sua rede, todas as apostas estão canceladas. Não creio que seja possível escapar. Portanto, considere isso como um alerta: o senhor deve criar contramedidas contra o clickjacking como se o seu site pudesse ser enquadrado a qualquer momento.
Eu era um cético. Também não queria acreditar. Mas depois que um especialista em segurança de chapéu branco me mostrou as explorações em nosso próprio site, felizmente, vivi para me arrepender. Não deixe que o código frame-busting também o leve a uma falsa sensação de segurança.