PowerScan
UK

Рядки User-Agent і Client Hints: що вони розкривають і що заморожено

Відбитки браузера · 6 хв читання · Автор: PowerScan

Фото: Unsplash

Рядок user agent — найстаріший сигнал ідентифікації в мережі й той, що найбільше змінився за останні кілька років. Прочитати його добре означає знати, що в ньому ще лишилося, що навмисно заморожено і куди поділися вилучені деталі.

Що каже рядок

Сучасний рядок Chromium у Windows виглядає як Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36. Історичні токени (Mozilla/5.0, AppleWebKit, like Gecko, Safari) існують для сумісності зі скриптами, написаними десятиліття тому, і не несуть жодної інформації. Корисні частини — це платформа (Windows NT 10.0, навіть у Windows 11), архітектура та основна версія браузера.

Те, що раніше там було, вилучено навмисно. Мінорна версія й патч тепер 0.0.0. Версію Windows зафіксовано на 10.0. Рядки Android більше не містять моделі пристрою. Це «скорочення user agent», яке Chromium впровадив у 2022–2023 роках саме тому, що рядок став поверхнею для відбитків.

Client Hints: ті самі дані, на запит

Вилучені деталі не зникли; вони перемістилися до User-Agent Client Hints. Сервер може запросити окремі поля заголовком Accept-CH, і тоді браузер надсилатиме заголовки на кшталт Sec-CH-UA-Platform-Version або Sec-CH-UA-Model у наступних запитах. Підказки з низькою ентропією (бренд і основна версія, платформа, прапорець мобільного пристрою) надсилаються за замовчуванням. Підказки з високою ентропією (повна версія, архітектура, розрядність, модель, версія платформи) надсилаються лише сайтам, які про них просять, а скрипт може запросити той самий набір через navigator.userAgentData.getHighEntropyValues().

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

Проблема узгодженості

Оскільки ті самі факти тепер доступні з двох джерел, їх можна порівняти. Браузер, що змінює рядок user agent, заявляючи macOS, але залишає navigator.userAgentData.platform повідомляти Windows, створив суперечність, яку тривіально виявити. Те саме стосується властивості navigator.platform, специфічних для ОС шрифтів, видимих сторінці, і рядка рендерера WebGL, що називає графічний драйвер, який існує лише в одній операційній системі. Підміна самого лише рядка роками була програшною стратегією.

Читання власного

Діагностика показує сирий рядок, браузер і версію, які з нього розбираються, та рушій (Blink, Gecko або WebKit). Зверніть увагу, що кожен браузер в iOS повідомляє WebKit, хоч би яким був бренд, бо цього вимагає Apple. Якщо розібрана назва браузера вас дивує, рядок змінює розширення або налаштування профілю; чи це проблема, залежить від того, чи згоден із цією зміною решта браузера.

Усі статті · Запустити перевірку