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 .