Главная » Хабрахабр » [Из песочницы] Почему нельзя установить размер шрифта у посещенной ссылки

[Из песочницы] Почему нельзя установить размер шрифта у посещенной ссылки

Привет, Хабр! Представляю Вашему вниманию перевод статьи «Why can’t I set the font size of a visited link?» автора Jim Fisher.

Это различие пришло к нам с времен появления веба. Посещенные ссылки отображаются фиолетовым; не посещенные — голубым. Скажем, вы хотите сделать посещенные ссылки серыми и уменьшить их размер, для того чтобы показать пользователю что эта ссылка уже была посещена.
Но CSS позволяет нам перенастроить эти свойства с помощью псевдо-селектора :visited!

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

Этот стиль применен к текущей странице:
Окрашивание ссылки в серый цвет, как и предполагалось, уведомляет нас о том что она уже была посещена, но размер шрифта остался прежним! Так происходит, потому что изменение размера шрифта может быть причиной уязвимости! Если CSS сможет изменить размер шрифта, я(Jim) могу сказать посещали ли Вы pornhub.com. Но как?

Наиболее очевидный способ — использовать window.getComputedStyle(). Веб страницы доступны для инспектирования отображенных элементов на странице. Он рассказывает о свойствах, примененных к вышеупомянутой посещенной ссылке; как сообщает браузер: font-size: 18px; color: rgb(0, 0, 238).

Я могу использовать эти данные для таргетированной рекламы, могу продать ваши данные или шантажировать вас, и так далее… Дыра в безопасности была закрыта путем запрета на изменение font-size для a:visited. Если getComputedStyle сообщит об изменении размера шрифта с 18px до 6px для посещенных ссылок, я(Jim) пойму, что на странице создана ссылка на pornhub.com, затем я проверю размер шрифта, для того чтобы определить историю посещений вашего браузера.

Это ложь — ссылка же серая! Но информация, полученная с помощью getComputedStyle, о цвете посещенной ссылки будет: rgb(0, 0, 238) — то есть голубое. Для свойства color, браузеры закрывают дыру в уязвимости другим способом: вместо запрета на изменение, они заставляют getComputedStyle лгать о реальном значении.

Почему мы не можем заставить getComputedStyle лгать так-же и о параметре font-size? Почему же используется два подхода? Позицию элемента на странице можно проверить так же с помощью .pageXOffset или .pageYOffset. Причина в том, что можно исследовать отображенные элементы веб страницы и другими методам, кроме getComputedStyle. Отключение font-size для a:visited — это жесткое, но надежное решение. Изменение font-size у посещенной ссылки будет влиять на смещение у других элементов, из-за чего можно косвенно проверить какие ссылки были посещены.

Все они — разные формы изменения цвета. По этой ссылке содержится краткий список разрешенных свойств, таких же как color, которые не должны влиять на макет страницы, и не могут быть обнаружены. Все другие CSS свойства — заблокированы.

Единственная возможность — временная атака: скажем, если изменение цвета в розовый заняло больше времени по сравнению с голубым, страница может измерить, сколько времени потребовалось для отображения элемента, и сравнить это с ожидаемой продолжительностью. В теории, нет способа, с помощью которого можно было бы определить, что цвет посещенной ссылки был изменен.

S.:
Отдельное спасибо за помощь в корректировке перевода Переверзевой Ольге P.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Перевод] История транзистора, часть 2: из горнила войны

Другие статьи цикла: История реле История электронных компьютеров История транзистора Горнило войны подготовило почву для появления транзистора. С 1939 по 1945 года технические знания из области полупроводников невероятно сильно разрослись. И тому была одна простая причина: радар. Самая важная технология ...

Что можно сделать через разъем OBD в автомобиле

Ни для кого не секрет, что в современных автомобилях все системы под завязку забиты различной электроникой, даже простой стеклоподъемник имеет собственный микроконтроллер и адрес в общей сети. Мне, как интересующемуся владельцу, стало интересно, что же можно сделать имея просто доступ ...