Популярные сайты шпионят за пользователями
История посещений как уязвимость
Браузеры хранят историю посещённых страниц и применяют разное оформление к ссылкам в зависимости от того, открывал ли их пользователь ранее. Посещённая ссылка получает псевдокласс :visited, непосещённая остаётся в состоянии :link. Каскадные таблицы стилей позволяют задавать для этих состояний отличающиеся цвета, фон, границы и другие визуальные свойства.
Злоумышленник может разместить на странице скрытый список ссылок на проверяемые ресурсы, а затем с помощью клиентского скрипта опросить вычисленные стили каждого элемента. Если стиль совпадает с заданным для :visited, браузер подтверждает факт посещения. Такой метод не даёт доступа к полному списку адресов из истории, но позволяет проверить наличие в ней конкретных URL.
Атака эксплуатирует фундаментальную особенность браузерного движка: возможность программно считывать визуальные параметры элемента после применения всех правил CSS. Защита сводится либо к отказу от раскрытия вычисленных стилей для псевдокласса :visited, либо к принудительному возврату значений, неотличимых от непосещённых ссылок. Браузеры, в которых скрипт не срабатывал, уже реализовали одно из таких ограничений на уровне движка.


