Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels
"Warum kann ich die Schriftgröße eines besuchten Links nicht festlegen?" von Jim Fisher.

Besuchte Links werden in lila angezeigt. nicht besucht - in blau. Dieser Unterschied ist seit dem Aufkommen des Webs zu uns gekommen. Mit CSS können wir diese Eigenschaften jedoch mit dem Pseudo-Selektor neu konfigurieren: besucht! Angenommen, Sie möchten die besuchten Links grau machen und ihre Größe verringern, um dem Benutzer anzuzeigen, dass dieser Link bereits besucht wurde.
a:visited { color: gray; font-size: 6px; }
Dieser Stil wird auf die aktuelle Seite angewendet:
Wenn Sie den Link wie erwartet grau färben, werden Sie darüber informiert, dass er bereits besucht wurde, die Schriftgröße bleibt jedoch gleich! Dies liegt daran, dass das Ändern der Schriftgröße die Ursache für die Sicherheitsanfälligkeit sein kann! Wenn CSS die Schriftgröße ändern kann, kann ich (Jim) feststellen, ob Sie pornhub.com besucht haben. Aber wie?
Webseiten stehen zur Verfügung, um die auf der Seite angezeigten Elemente zu überprüfen. Der naheliegendste Weg ist die Verwendung von window.getComputedStyle (). Er spricht über die Eigenschaften, die auf den oben genannten besuchten Link angewendet werden; wie vom Browser gemeldet: Schriftgröße: 18px; Farbe: RGB (0, 0, 238).
Wenn getComputedStyle eine Änderung der Schriftgröße von 18px auf 6px für die besuchten Links meldet, wird ich (Jim) verstehen, dass die Seite einen Link zu pornhub.com erstellt hat, und dann die Schriftgröße überprüfen, um den Browserverlauf Ihres Browsers zu bestimmen. Ich kann diese Daten für gezielte Werbung verwenden, Ihre Daten verkaufen oder Sie erpressen usw. Die Sicherheitslücke wurde geschlossen, indem die Änderung der Schriftgröße für einen Besuch verboten wurde.
Die mit getComputedStyle erhaltenen Informationen über die Farbe des besuchten Links lauten jedoch: rgb (0, 0, 238) - also blau. Das ist eine Lüge - der Link ist grau! Für die Farbeigenschaft schließen Browser die Lücke in der Sicherheitsanfälligkeit auf andere Weise: Anstatt Änderungen zu verbieten, zwingen sie getComputedStyle, über den tatsächlichen Wert zu lügen.
Warum werden zwei Ansätze verwendet? Warum können wir getComputedStyle nicht dazu bringen, auch über den Parameter für die Schriftgröße zu lügen? Der Grund dafür ist, dass Sie neben getComputedStyle auch die angezeigten Elemente der Webseite und andere Methoden untersuchen können. Sie können die Position eines Elements auf einer Seite auch mit .pageXOffset oder .pageYOffset überprüfen. Das Ändern der Schriftgröße des besuchten Links wirkt sich auf den Versatz anderer Elemente aus, wodurch Sie indirekt überprüfen können, welche Links besucht wurden. Das Deaktivieren der Schriftgröße für a: visit ist eine schwierige, aber zuverlässige Lösung.
Dieser
Link enthält eine kurze Liste der zulässigen Eigenschaften, z. B. Farbe, die das Seitenlayout nicht beeinflussen sollten und nicht erkannt werden können. Alle von ihnen sind verschiedene Formen der Farbänderung. Alle anderen CSS-Eigenschaften sind blockiert.
Theoretisch kann auf keinen Fall festgestellt werden, dass die Farbe des besuchten Links geändert wurde. Die einzige Möglichkeit ist ein vorübergehender Angriff: Wenn beispielsweise der Farbwechsel zu Pink länger als Blau dauerte, kann die Seite messen, wie lange es gedauert hat, das Element anzuzeigen, und es mit der erwarteten Dauer vergleichen.
PS:Besonderer Dank für die Hilfe bei der Anpassung der Übersetzung an
Olga Pereverzeva .
Dank Oleg Yatsenko (
Samber ) machte er in den Kommentaren darauf aufmerksam, dass die Lösung des Problems mit einem solchen Datenleck erstmals in
Mozilla implementiert wurde - der Autor der Lösung ist
David Baron .