Блог Изящная уязвимость

02 июня 2024

С незапамятных времён браузеры умели выделять ссылки на страницы, которые пользователь уже посещал. По умолчанию обычная ссылка раскрашивалась синим цветом, посещённая – фиолетовым. А в 2000-х годах скриптам на JavaScript, которые выполняются прямо в браузере, разрешили узнавать, какие стили фактически были применены к элементу (computed style). Умные люди сложили два плюс два и поняли: теперь можно узнать, на какие сайты ходил посетитель.

Работало это просто. На странице создавалась невидимая ссылка на сайт конкурентов или вообще куда угодно, после чего скрипт выяснял, не фиолетовая ли она. Можно было проверить тысячи ссылок за секунду и узнать про гостя много интересного. Не правда ли, изящная уязвимость? И ни капли не баг, ведь всё работало именно так, как задумано.

Когда это стало достоянием общественности и появились сайты, которые знали и наглядно показывали, что пользователь делал прошлым летом, поднялась волна кудахтанья про нарушенное privacy. В 2010 году браузеры научились врать – например, даже если фактически ссылка отрисовывалась фиолетовой, браузер отвечал скрипту, что она синяя. Кроме того, сократилось число CSS-правил (стилей), которые можно применить к посещённым ссылкам.

А теперь самое интересное. Угадайте, действительно ли веб-разработчики лишились возможности проверить, ходил ли посетитель на определённый сайт?
Разумеется, нет. В 2024 году существуют как минимум две рабочие методики. Да, алгоритм стал хитрее; да, немного снизилась точность. Но в целом ничего не изменилось. Поэтому в следующий раз, когда вам показывают подозрительно точно подобранную рекламу, не спешите обвинять телефон в прослушивании. Всё может быть гораздо проще.