BreakHub
СправочникОтпечаток браузера

Часовой пояс, язык и IP: как сайт замечает, что вы притворяетесь

Системы оценки рисков редко решают по одному сигналу. Они проверяют, согласуются ли между собой часовой пояс, выведенный из IP, тот, что сообщает браузер, системные часы, языковой HTTP-заголовок и список языков в JavaScript. Какие расхождения нормальны, а какие наказываются.

5 мин чтения · Опубликовано 10 сентября 2026 г.

Человек на японском выходном узле, с системным часовым поясом Шанхая и браузером на упрощенном китайском. Сайту не нужен хитрый анализ: положите эти три факта рядом, и история расскажет себя сама. Блокировать за это не обязательно будут, но в оценку это попадет. В этой статье — что именно сравнивается и с какими несостыковками можно жить.

Часовой пояс по IP

Получив ваш IP, сервер ищет его в базе GeoIP (MaxMind, IPinfo и им подобные) и получает страну, регион, город и — бонусом — имя часового пояса вроде Asia/Tokyo. На уровне страны это довольно надежно; на уровне города — куда хуже, потому что базы регулярно приписывают целые блоки адресов дата-центров к юридическому адресу оператора.

Зная часовой пояс IP, сервер может вычислить, «сколько сейчас должно быть времени там». Этот шаг пригодится дальше.

Часовой пояс, который сообщает браузер

У JavaScript на странице два источника:

  • Intl.DateTimeFormat().resolvedOptions().timeZone возвращает имя зоны IANA, например Asia/Shanghai.
  • new Date().getTimezoneOffset() возвращает разницу между локальным временем и UTC в минутах; для пекинского времени это -480.

В нормальном браузере это два выражения одной и той же системной настройки, и они всегда согласуются. Их отношение к часовому поясу IP — другое дело: IP в Токио (UTC+9), JavaScript говорит «Шанхай» (UTC+8), разница в час.

Летнее время — легкая ловушка. У America/Los_Angeles смещение 480 зимой и 420 летом. Сайты сравнивают по сегодняшней дате, поэтому инструмент, который меняет зону, не обрабатывая DST, прокалывается в определенные месяцы.

Сами часы

Помимо зоны можно сравнить и время. Сервер знает текущий момент в часовом поясе IP; страница присылает new Date(); вычитаем. Разница в несколько секунд означает, что системные часы синхронизированы. Десять с лишним минут — либо часы никогда не синхронизируются (обычное дело на старых виртуальных машинах), либо зону и часы меняли по отдельности. Наша оценка подлинности снимает небольшой штраф за расхождение больше трех минут. Небольшой, потому что часы у обычных людей тоже уходят.

Язык: три места, три ответа

Язык утекает из трех мест, и они живут на разных уровнях:

  1. Заголовок запроса Accept-Language. Отправляется с каждым запросом, виден серверу напрямую, выглядит как zh-CN,zh;q=0.9,en;q=0.8.
  2. navigator.language и navigator.languages. То, что читает скрипт страницы; обычно это та же настройка, что и в заголовке.
  3. Локаль Intl по умолчанию, например new Intl.NumberFormat().resolvedOptions().locale. Отражает регион системы или браузера и используется при форматировании чисел и дат.

В настоящем браузере все три хорошо согласованы: не побайтово одинаковы, но из одного источника. Основной язык в Accept-Language, отличающийся от navigator.language, — один из самых тяжелых штрафов на этом сайте, потому что такое почти всегда означает, что кто-то правил одно из значений вручную.

Два примера

IP в Японии, часовой пояс Asia/Shanghai, язык zh-CN. Хрестоматийный «китайский пользователь через японский узел». Два сигнала из трех говорят «Китай», один — «Япония». Большинство сайтов за это не остановит: комбинация слишком распространена, и она честная. Вы ничего не подделывали, ваш трафик просто сделал крюк. Это будет записано, может слегка сдвинуть рекомендации или оценку риска — и, пожалуй, все.

IP в США, часовой пояс America/Los_Angeles, язык zh-CN, список шрифтов, полный китайских. Для китайскоговорящего жителя Лос-Анджелеса это совершенно обычная картина. Для модели оценки рисков она сильно пересекается с «пользователь из Китая, поменявший часовой пояс», так что дополнительную проверку такой профиль может вызывать чаще, чем первый. Ирония в том, что чем старательнее вы подгоняете часовой пояс под IP, тем больше это похоже на маскировку — если только язык, шрифты и раскладка клавиатуры не меняются вместе с ним.

Ошибки, которые постоянно делают антидетект-браузеры

«Браузеры с подменой отпечатка», или антидетект-браузеры, продают обещание, что каждый профиль выглядит как отдельный настоящий человек. Спотыкаются они в предсказуемых местах:

  • Часовой пояс в JavaScript меняется, а Accept-Language — нет, или наоборот.
  • timeZone в Intl переопределен, а getTimezoneOffset() по-прежнему возвращает старое значение, и два API противоречат друг другу.
  • Зона меняется, а системное время — нет, и расхождение часов относительно зоны IP получается ровно целым числом часов.
  • Неестественный список языков: en-US, zh-CN без простого zh, или одна запись в Accept-Language и пять в navigator.languages.
  • Меняются только значения, видимые из браузера; HTTP-уровень, включая Client Hints, не тронут.

Общее у всего этого — частичная модификация. Системы оценки рисков к ней крайне чувствительны, потому что у настоящих пользователей она почти не встречается.

Советы тем, кто пользуется инструментами обхода блокировок

Не гонитесь за идеальной маскировкой — это задача из другой индустрии. Знать нужно кое-что попроще: часовой пояс, не совпадающий с IP, — естественное следствие использования прокси, сайты видят это постоянно, и наша оценка подлинности штрафует за это лишь слегка. Жестко наказывается откровенная подделка: user agent, не соответствующий движку, navigator.webdriver со значением true, два разных рисунка canvas. Оставьте браузер в покое и потратьте усилия на выбор приличного инструмента, а не на возню с часовыми поясами.

Чтобы увидеть свои три значения часового пояса и три значения языка, запустите проверку часового пояса.

Вопросы и ответы

Станет ли безопаснее, если выставить системный часовой пояс под выходной узел? Обычно нет. Если язык, системные часы, шрифты и Client Hints не меняются вместе с ним, вы просто заменили одну несостыковку на другую, и новая больше похожа на маскировку.

Часовой пояс по IP показывает Гуанчжоу, а я в Шэньчжэне. Это важно? Нет. Точность GeoIP на уровне города и так ограничена, а сайты сравнивают часовые пояса, а не города. И там и там Asia/Shanghai.

Что-то изменится, если переключить браузер на английский? Штрафа не будет, пока заголовок и JavaScript согласуются. Многие разработчики в Китае работают в полностью английском окружении. Единственный эффект — на каком языке сайт откроется по умолчанию.