Bonjour, Habr! Je vous présente la traduction de l'article
"Pourquoi ne puis-je pas définir la taille de la police d'un lien visité?" par Jim Fisher.

Les liens visités sont affichés en violet; pas visité - en bleu. Cette différence nous est venue depuis l'avènement du web. Mais CSS nous permet de reconfigurer ces propriétés avec le pseudo-sélecteur: visité! Supposons que vous souhaitiez rendre les liens visités gris et réduire leur taille afin de montrer à l'utilisateur que ce lien a déjà été visité.
a:visited { color: gray; font-size: 6px; }
Ce style est appliqué à la page actuelle:
La coloration du lien en gris, comme prévu, nous informe qu'il a déjà été visité, mais la taille de police reste la même! Cela se produit car la modification de la taille de la police peut être la cause de la vulnérabilité! Si CSS peut changer la taille de la police, je (Jim) peux dire si vous avez visité pornhub.com. Mais comment?
Des pages Web sont disponibles pour inspecter les éléments affichés sur la page. La façon la plus évidente est d'utiliser window.getComputedStyle (). Il parle des propriétés appliquées au lien visité susmentionné; tel que rapporté par le navigateur: taille de la police: 18px; couleur: rgb (0, 0, 238).
Si getComputedStyle signale un changement de taille de police de 18px à 6px pour les liens visités, je (Jim) comprendrai que la page a créé un lien vers pornhub.com, puis je vérifierai la taille de la police afin de déterminer l'historique de navigation de votre navigateur. Je peux utiliser ces données pour une publicité ciblée, je peux vendre vos données ou vous faire chanter, et ainsi de suite ... Le trou de sécurité a été fermé en interdisant le changement de taille de police pour a: visité.
Mais les informations obtenues à l'aide de getComputedStyle sur la couleur du lien visité seront: rgb (0, 0, 238) - c'est-à-dire bleu. C'est un mensonge - le lien est gris! Pour la propriété color, les navigateurs ferment le trou dans la vulnérabilité d'une autre manière: au lieu d'interdire les modifications, ils forcent getComputedStyle à mentir sur la valeur réelle.
Pourquoi deux approches sont-elles utilisées? Pourquoi ne pouvons-nous pas faire en sorte que getComputedStyle mente également sur le paramètre de taille de police? La raison en est que vous pouvez examiner les éléments affichés de la page Web et d'autres méthodes en plus de getComputedStyle. Vous pouvez également vérifier la position d'un élément sur une page à l'aide de .pageXOffset ou .pageYOffset. La modification de la taille de police du lien visité affectera le décalage d'autres éléments, ce qui vous permettra de vérifier indirectement les liens visités. La désactivation de la taille de police pour a: visité est une solution difficile mais fiable.
Ce
lien fournit une courte liste de propriétés autorisées, telles que la couleur, qui ne doivent pas affecter la mise en page et ne peuvent pas être détectées. Tous sont des formes différentes de changement de couleur. Toutes les autres propriétés CSS sont bloquées.
En théorie, il est impossible de déterminer si la couleur du lien visité a été modifiée. La seule possibilité est une attaque temporaire: par exemple, si le changement de couleur en rose a pris plus de temps que le bleu, la page peut mesurer le temps qu'il a fallu pour afficher l'élément et le comparer avec la durée attendue.
PS:Un merci spécial pour l'aide à l'ajustement de la traduction en
Olga Pereverzeva .
Grâce à Oleg Yatsenko (
Samber ), dans les commentaires, il a attiré l'attention sur le fait que la solution au problème d'une telle fuite de données a été mise en œuvre pour la première fois dans
Mozilla - l'auteur de la solution est
David Baron .