Спросите у браузера, на какой операционной системе он работает, и одного ответа вы не получите. Вы получите пять. Строка User-Agent называет ОС. И navigator.platform тоже. И Client Hints API, и заголовок Sec-CH-UA-Platform, который браузер прикрепляет к каждому запросу, и (в Firefox) старое свойство navigator.oscpu.
На обычной машине этого никто не замечает, потому что все пять говорят одно и то же. Но стоит вам изменить один из них и забыть про остальные, как вы перестаёте выглядеть Mac или Windows-компьютером и начинаете выглядеть кое-чем куда более интересным: браузером, который врёт.
Виджет на этой странице прямо сейчас выполняет ровно такую перекрёстную проверку в вашем браузере.
Пять мест, где браузер называет свою ОС
- Строка User-Agent. Классика.
Mozilla/5.0 (Windows NT 10.0; Win64; x64)...— и её правит каждое расширение для подмены на свете. navigator.platform. Куда более старое свойство JavaScript, о котором большинство инструментов подмены попросту забывают.navigator.userAgentData.platform. Современный Client Hints API в браузерах на Chromium. Читается любым скриптом, без всяких разрешений.- Заголовок
Sec-CH-UA-Platform. Те же данные Client Hints, но отправляемые по сети с каждым запросом. Сервер сайта читает их ещё до того, как выполнится хоть одна строка вашего JavaScript. navigator.oscpu. Только Firefox. И это само по себе информация: браузер, который выдаёт себя за «Chrome на Windows», но при этом раскрываетoscpu, уже себя выдал.
Всё это не берётся из одной общей настройки. Правка User-Agent не обновляет заголовки, а переопределение свойства JavaScript не доходит до сетевого уровня. Именно эта независимость и заставляет перекрёстную проверку работать:
Это та же ловушка, что ловит подмену версии, о которой мы писали в статье Ваш User-Agent врёт. Версия Chromium — нет. Закономерность универсальна: каждый подделанный вами сигнал — это ещё один шанс вступить в противоречие с теми сигналами, которые вы не тронули.
Настоящие браузеры тоже врут — просто стандартными способами
Вот что удивляет людей: честный браузер тоже не сообщает вашу ОС точно.
- На 64-битной Windows
navigator.platformговоритWin32. Он говорит так с девяностых, и изменить это значило бы сломать старые сайты. - На Mac с Apple Silicon он говорит
MacIntel. Никакого Intel внутри нет, но ярлык пережил смену процессора. - User-Agent любого современного Mac ограничивает сообщаемую версию macOS сверху, так что разные выпуски macOS могут выдавать одну и ту же строку.
Трекеры знают эту стандартную ложь наизусть, и это работает в обе стороны. Подмена, которая сообщает Win64, потому что так «правильнее», мгновенно вызывает подозрение — ведь ни один настоящий браузер никогда так не говорил. Чтобы пройти проверку, подделка должна врать в точности так же, как врёт оригинал. А большинство инструментов подмены этого фольклора не знают.
Даже безупречные ярлыки выдают себя
Допустим, вы сделали всё как надо: User-Agent, navigator.platform, Client Hints и заголовки переписаны так, чтобы все они сходились на macOS. Везде согласованно. Готово?
Не совсем. Ярлыки — это лишь та часть ОС, которую можно переименовать. Остальная операционная система продолжает вести себя как она сама:
Громче всех — шрифты. В Windows идут Segoe UI и Calibri, в macOS — Helvetica Neue и San Francisco, в дистрибутивах Linux — DejaVu. Скрипт может проверить их наличие за миллисекунды (в нашей статье про canvas-фингерпринтинг показан приём с измерением). Строка рендерера WebGL столь же прямолинейна: Direct3D означает Windows, Metal — Mac, без исключений.
Так что подмена ОС — это не один рубильник. Это проблема ярлыков и проблема поведения, и проблема поведения куда сложнее.
Что делать на самом деле
- Если вы не управляете личностями осознанно — не подменяйте свою ОС. Вы попадёте в крошечную, странную толпу самопротиворечивых браузеров вместо огромной толпы обычных. Слиться с массой лучше, чем прятаться.
- Никогда не подменяйте наполовину. Переключатель User-Agent, который правит только строку, делает вас узнаваемее, а не наоборот. Если вы не можете изменить все поверхности — не меняйте ни одной.
- Если вам действительно нужны отдельные личности — заставьте согласоваться весь стек. Ярлыки, заголовки, шрифты, WebGL, всё. Именно для этого и существуют анти-детект браузеры. Incogniton собирает каждый профиль так, чтобы история операционной системы рассказывалась согласованно — от сетевого уровня до списка шрифтов, а не приклеивает новый ярлык на неизменную машину.
Хотите увидеть, как держится ваш собственный браузер? Виджет на этой странице проверяет сигналы вашей ОС, а полный сканер запускает вместе с ним проверку версии, тест на утечки WebRTC и ещё десяток других.