Por que não consigo definir o tamanho da fonte do link visitado?

Olá Habr! Apresento a tradução do artigo "Por que não consigo definir o tamanho da fonte de um link visitado?" de Jim Fisher.



Os links visitados são exibidos em roxo; não visitado - em azul. Essa diferença chegou até nós desde o advento da web. Mas o CSS nos permite reconfigurar essas propriedades com o pseudo-seletor: visitado! Digamos que você queira deixar os links visitados em cinza e reduzir seu tamanho para mostrar ao usuário que esse link já foi visitado.

a:visited { color: gray; font-size: 6px; } 

Este estilo é aplicado à página atual:


Colorir o link em cinza, como esperado, nos notifica que ele já foi visitado, mas o tamanho da fonte permanece o mesmo! Isso acontece porque alterar o tamanho da fonte pode ser a causa da vulnerabilidade! Se o CSS pode alterar o tamanho da fonte, eu (Jim) posso saber se você visitou pornhub.com. Mas como

Páginas da Web estão disponíveis para inspecionar os itens exibidos na página. A maneira mais óbvia é usar window.getComputedStyle (). Ele fala sobre as propriedades aplicadas ao link visitado acima mencionado; conforme relatado pelo navegador: tamanho da fonte: 18 px; cor: rgb (0, 0, 238).

Se o getComputedStyle relatar uma alteração no tamanho da fonte de 18px para 6px nos links visitados, eu (Jim) entenderei que a página criou um link para pornhub.com, depois verificarei o tamanho da fonte para determinar o histórico de navegação do seu navegador. Posso usar esses dados para publicidade direcionada, posso vender seus dados ou chantageá-lo e assim por diante ... A brecha de segurança foi fechada ao proibir a alteração no tamanho da fonte de um: visitado.

Mas as informações obtidas usando getComputedStyle sobre a cor do link visitado serão: rgb (0, 0, 238) - ou seja, azul. Isso é mentira - o link é cinza! Para a propriedade color, os navegadores fecham o buraco na vulnerabilidade de outra maneira: em vez de proibir alterações, eles forçam o getComputedStyle a mentir sobre o valor real.

Por que duas abordagens são usadas? Por que não podemos fazer com que o getComputedStyle também se refira ao parâmetro tamanho da fonte? O motivo é que você pode examinar os elementos exibidos na página da web e outros métodos, além de getComputedStyle. Você também pode verificar a posição de um elemento em uma página usando .pageXOffset ou .pageYOffset. Alterar o tamanho da fonte do link visitado afetará o deslocamento de outros elementos, pelo que você pode verificar indiretamente quais links foram visitados. Desativar o tamanho da fonte para um: visitado é uma solução difícil, porém confiável.

Esse link fornece uma pequena lista de propriedades permitidas, como cores, que não devem afetar o layout da página e não podem ser detectadas. Todos eles são formas diferentes de mudança de cor. Todas as outras propriedades CSS estão bloqueadas.

Em teoria, não há como determinar que a cor do link visitado foi alterada. A única possibilidade é um ataque temporário: por exemplo, se a mudança de cor para rosa demorar mais que o azul, a página poderá medir quanto tempo levou para exibir o elemento e compará-lo com a duração esperada.

PS:
Agradecimentos especiais pela ajuda no ajuste da tradução para Olga Pereverzeva .

Graças a Oleg Yatsenko ( Samber ), nos comentários, ele chamou a atenção para o fato de que a solução para o problema com esse vazamento de dados foi implementada pela primeira vez no Mozilla - o autor da solução é David Baron .

Source: https://habr.com/ru/post/pt445052/


All Articles