Компания Google наконец-то исправила давнюю уязвимость в браузере Chrome, которая позволяла сайтам отслеживать историю посещённых страниц пользователя. Речь идёт о механизме отображения ссылок — когда пользователь кликал на ссылку, она меняла цвет с синего на фиолетовый благодаря CSS-селектору «:visited». Это визуальное различие можно было использовать для создания сценариев, в которых сайты узнают, какие страницы человек открывал раньше.
Проблема была не просто теоретической. За последние годы исследователи продемонстрировали множество атак, связанных с этим механизмом. Среди них — тайминговые атаки, анализ изменения пикселей, взаимодействий с пользователем и даже атаки на уровне процессов. Всё это позволяло злоумышленникам извлекать сведения о поведении пользователя в браузере без его согласия.
В грядущей версии Chrome 136 компания Google внедрит механизм «тройной изоляции» базы посещённых ссылок. Теперь информация о том, что ссылка была посещена, будет сохраняться не глобально, а с учётом трёх параметров: самого URL, домена в адресной строке и источника фрейма, в котором отображается ссылка. Это означает, что сайт больше не сможет определить, была ли конкретная ссылка открыта на другом ресурсе — её статус «:visited» просто не сработает за пределами исходного контекста.
При этом Google сделала исключение для «внутренних ссылок»: если пользователь посетил одну страницу сайта, то на этом же сайте она будет отображаться как посещённая даже в том случае, если переход произошёл с другого ресурса. По мнению разработчиков, это не нарушает конфиденциальность, так как сам сайт и так знает, какие его страницы были открыты.
Инженеры компании решили не убирать поддержку селектора «:visited» полностью, поскольку он даёт важные визуальные подсказки и помогает в навигации. Также был отклонён вариант с системой разрешений, так как его легко обойти — или злоупотребить им, подталкивая пользователя к согласию на трекинг.