Назад в Центр знаний
Отпечатки

CreepJS: часовой пояс, смещения и location

Источники полей часового пояса CreepJS, исторические расчёты и условный вывод: почему они не доказывают координаты, личность или автоматизацию.

BotBrowser Team

Документация

Нужна структурированная документация по теме Отпечатки?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Отчёт о часовом поясе CreepJS объединяет идентификатор пояса, текст даты, исторические вычисления и смещения текущей даты. Название locationMeasured не означает, что датчик определил положение посетителя. BotBrowser поддерживает настройку часового пояса, локали и языка, но не гарантирует классификацию CreepJS и не превращает временные данные в доказательство физического местоположения. Чтобы различие объясняло несогласованность браузера, нужны входные данные и контекст сравнения каждого поля.

Кратко

  • location поступает из идентификатора пояса форматтера по умолчанию; zone - из части строки Date в скобках.
  • locationMeasured использует фиксированное историческое сравнение и список городов. Это не координаты и не полный список совместимых поясов.
  • Историческое сравнение использует 1113; offset и offsetComputed имеют отдельные пути текущей даты. Это не три повтора одного измерения.
  • Отображение выбирает одно значение положения и одно смещение; при различии соответствующая альтернатива скрывается.
  • lied наследует ранее отмеченные сомнения в методах. Отсутствие отчёта, изменённая подпись и унаследованная оценка - разные состояния.

Содержание

Четыре отдельных пути: разрешённая подпись пояса, историческое подмножество, текущие смещения и условный вывод. Ни один не измеряет физическое положение.

Семь полей и разные источники

Модуль часового пояса CreepJS, закреплённый на ревизии 10aa6724cd33a1015db1574211890518cd04f0cc, возвращает семь именованных свойств. Происхождение важнее соседства в карточке. Идентификатор пояса описывает выбранный средой набор правил; числовое смещение - отношение для определённой даты; временная метка - момент, полученный построением даты. Сведение трёх категорий к одному ответу о «месте» уничтожает различие, необходимое для диагностики расхождения.

Поле location начинается с Intl.DateTimeFormat().resolvedOptions().timeZone. Форматтер не получает явно заданный пояс. Поэтому поле отражает выбор среды по умолчанию, а не запрос на определение положения пользователя. Затем модуль меняет представление идентификатора: заменяет одно подчёркивание пробелом, а косые черты - разделителями с запятыми. Видимая подпись не является исходной строкой без изменений. Для сравнения написаний или псевдонимов исходный идентификатор следует хранить отдельно.

У zone другой источник. Новый Date преобразуется в текст, из которого выражение, удаляющее скобки, выбирает часть. Это не второй вызов resolvedOptions(). Текст Date и идентификатор IANA могут иметь разные названия и назначения, не противореча друг другу. Читаемое описание пояса нельзя подставлять вместо идентификатора, ожидаемого параметром приложения timeZone.

ПолеИсточник в закреплённом модулеМаксимально обоснованная интерпретация
zoneТекст из новой строки DateОтображаемое описание из этой строки
locationПояс форматтера по умолчанию с последующим оформлениемСообщённый идентификатор в виде подписи
locationMeasuredИсторическое сравнение и условная сводка кандидатовРезультат сравнения, заданного исходниками
locationEpochЧисловое преобразование локальной исторической датыПостроенная историческая метка времени
offsetgetTimezoneOffset() нового DateСмещение даты, представленной экземпляром
offsetComputedРазность двух отдельно разобранных строк датыРасчёт текущей даты с другими правилами построения
liedПервое истинное значение существующих оценок, иначе falseУнаследованная оценка, не новое измерение положения

Разбор отчёта Intl CreepJS отделяет форматированные образцы от сбора локалей конструкторов. Карточке пояса тоже нужно разделение происхождения, но её поля не производятся шестью функциями форматирования сборщика Intl. Подпись даты рядом с полем пояса не делает модули взаимозаменяемыми. Ревизия, возвращённое свойство и отображаемая строка должны находиться в одной записи сравнения, чтобы не соединять незаметно значения разных сборщиков.

locationEpoch особенно легко принять за время сбора. Исходник строит дату 1 июля в 1113 и преобразует её в число. Оно не поступает из разрешённого API положения и не фиксирует открытие страницы отчёта. Система поддержки, записавшая его в колонку «последнее посещение», внесла бы ошибку в собственную модель, даже при точном совпадении отображаемого числа с выходом детектора.

Исторические смещения и ограниченный поиск

Исторический путь сравнивает два вычисления для одного выбранного года. Одно следует локальному построению даты системой; другое использует явно заданный пояс через Intl.DateTimeFormat. Выбраны 1113 и июльская дата. Текущее смещение не сравнивается непосредственно с историческим, чтобы объявить географическое совпадение. Текущие поля offset и offsetComputed формируются отдельно ниже в сборщике.

При совпадении исторических результатов сокращение кандидатов начинается с самого сообщённого пояса. Иначе модуль ищет во встроенном списке cities записи, исторический расчёт которых равен системному результату. Это заданная исходниками коллекция названий, а не обновляемый географический справочник. Её состав относится к закреплённой ревизии. Отсутствующий в списке пояс не становится найденным кандидатом лишь потому, что среда распознаёт его идентификатор.

Рекурсивная функция также ограничивает смысл «совпавшего множества». Она фильтрует левую часть списка и возвращает найденное подмножество; к правой части переходит только при пустом левом результате. Все совпадения двух половин не объединяются в глобальное множество. Поэтому описание выхода как всех поясов, совместимых с наблюдением, было бы сильнее возможностей проверенного поиска. Список и стратегия вместе ограничивают итоговое подмножество.

Последнее сокращение сохраняет имя только тогда, когда подмножество содержит один элемент, равный сообщённому поясу. Остальные результаты передаются функции компактной сводки проекта. Компактное значение locationMeasured - не обнаруженный город, который браузер отказался раскрыть. Равенство сводок также не доказывает равенство полных баз поясов. Исходный состав и контекст поиска - информация, которую отображаемая сводка не раскрывает.

Теоретическая документация IANA объясняет дополнительную осторожность с историей. Главная область совместимости касается часов, совпадающих после 1970; более ранние записи могут быть неполными и географически ограниченными. Дата в 1113 полезна для анализа взаимодействия двух программных путей с историческими правилами, но не является независимо проверенной записью средневекового положения посетителя. Наблюдаемое различие требует контекста браузера, данных среды и построения дат до назначения конкретной причины.

Названия, правила и география

Идентификаторы поясов обозначают историю правил, связанную с представительными местами. Это не текущая GPS-позиция. Несколько мест могут иметь одинаковое смещение в один момент, а человек может выбрать пояс, не связанный с нынешним положением. Сравнение псевдонимов ICU и поясов разбирает сообщённые названия и фиксированные смещения в другой документированной среде. Его выходы нельзя переносить как измерения этого закреплённого модуля CreepJS.

Граница, выведенная из исходников, полезна и без запуска браузера. Значение locationMeasured можно классифицировать как сохранённое сообщённое имя или компактный результат кандидатов. Это указывает ветвь, создавшую значение, но не удостоверяет страну, сетевой маршрут или человека. Для утверждений о координатах нужны данные интерфейса определения положения и контекст разрешений; ни то ни другое не входит в этот сборщик.

Два пути смещения текущей даты

Прямое поле offset читает new Date().getTimezoneOffset(). MDN определяет результат в минутах: положительный для местного пояса позади UTC и отрицательный для опережающего. Дата экземпляра важна, поскольку сезонные и исторические правила меняют смещение между датами. Поэтому число должно оставаться связано с моментом или датой получения, а не храниться как постоянное свойство названия пояса.

Функция offsetComputed начинает иначе. Она извлекает дату из новой ISO-сериализации, строит две строки разного формата, вычитает числовые значения дат и переводит разность в минуты. Часть даты ISO следует календарному дню UTC и около полуночи может отличаться от местного дня. Это не повторный вызов прямого метода. Выбранное построение даты важно для сравнений около переходов часов.

Одна форма - строка ISO только с датой; другая разделяет месяц, день и год косыми чертами. ECMA-262 задаёт интерпретацию формы только с датой в UTC. MDN отмечает зависимость нестандартного разбора от реализации. Объяснение исходника может назвать эти формы, но утверждение об одинаковом разборе косых черт всеми браузерами потребовало бы доказательств за пределами стандартных правил строк даты и времени. Вычисленное значение нельзя считать независимыми эталонными часами.

Функция применяет ~~ к разности минут. Оператор выполняет целочисленное преобразование; он не сохраняет исходные миллисекунды и не добавляет категорию исключения. Числовое совпадение после преобразования слабее сравнения всех промежуточных входов. Если отчёт хранит лишь итоговую строку смещения, более точное чтение числа или подпись с сокращением пояса не восстановят детали построения.

Сравнения около переходов часов

Гипотетический отчёт, собранный рядом с сезонным переводом часов, иллюстрирует проблему входов. Новый Date для offset и календарные строки для offsetComputed необязательно представляют один момент. Поэтому различие может потребовать сначала проверить выбор дат, а затем исследовать изменение API. Это пример интерпретации, не наблюдавшийся результат браузера. Само чтение исходника не устанавливает конкретный результат перехода.

Запись сравнения позволяет устранить неоднозначность без хранения полного отпечатка. Сохраните время сбора, идентификатор пояса, оба исходных смещения и ревизию. Если вопрос зависит от перехода, нужны точные построенные даты. Смещение без даты не устанавливает применённое сезонное правило; два числа, сведённые к одной выбранной строке, не доказывают согласия путей получения.

Условный вывод и унаследованные оценки

Обычный вывод не печатает подписанную пару для каждого сравнения. Для положения выбирается locationMeasured, если значения различаются, иначе location. Для смещения выбирается offsetComputed при различии, иначе offset. Таким образом, снимок карточки может скрывать альтернативу именно при наличии расхождения. Вывод о согласии на основании одного видимого числа переворачивает смысл условного отображения.

Обычная карточка также показывает zone, когда значение истинно, и печатает locationEpoch. Эти решения объясняют происхождение строк, но не превращают их порядок в полный диагностический протокол. Отсутствующая подпись не означает автоматически отказ API пояса. Отображённое значение и исходный объект содержат разную информацию; для диагностики расхождения нужны именованные исходные поля, а не только порядок в карточке.

Свойство lied объединяет три заранее заполненных ключа оценок оператором JavaScript || с возвратом к false. Сохраняется первый истинный операнд; это не число трёх находок. Более того, сборщик не задаёт свойство проверкой равенства offset и offsetComputed или сходства подписи с названием города. Унаследованную оценку и локальное различие следует оставлять отдельными наблюдениями.

Если внешний блок сбора выбрасывает исключение, модуль регистрирует неудачу, сохраняет ошибку и не возвращает объект отчёта. Отображение проверяет отсутствие fp.timezone и выбирает пометку blocked. Она сама не определяет, какой конструктор, разбор, доступ к свойству или историческая операция отказали. Называть конкретный отказавший API по этой пометке означало бы предположение за пределами доказательств.

Видимая ситуацияДополнительные данныеЧто известно без них
Одна строка смещенияoffset и offsetComputedВыбрано значение; равенство неизвестно
Компактное значение положенияlocation, locationMeasured и ревизияПоказана сводка исходника, не координаты
Стиль сомнения в карточкеИсходная запись оценкиНа отображение повлияла унаследованная оценка
Карточка blockedНаличие сборщика и контекст ошибкиВ этой ветви отсутствовал обычный объект

Сценарии сравнения и полезные записи

Изменившееся описание zone при неизменном идентификаторе - сравнение текстового слоя. Исследовать нужно разницу между текстом Date и записанным источником location, а не положение двух устройств в разных регионах. Изменённый идентификатор касается разрешения и настройки форматтера. Для этих ситуаций нужны разные следующие проверки, даже если обе неформально называют «пояс изменился».

Сохранённый location при изменённом locationMeasured касается исторического сравнения или сокращения фиксированного списка. Сначала сравниваются ревизия CreepJS и данные поясов среды, а не утверждается перемещение посетителя. Изменение locationEpoch также относится к построенной исторической дате. Разделение свойств не даёт системе поддержки превратить различие программных данных в необоснованное реальное путешествие.

Изменённый offset при стабильных названиях может соответствовать правилам, зависящим от даты. Записи нужны даты, чтобы отличить сезонное изменение от перенастройки. И наоборот, равенство смещения не доказывает одинаковые правила: один момент не описывает все прошлые и будущие переходы. Полезно сравнивать именованное поле при определённых входах, а не заявлять общую идентичность двух сред.

Документация BotBrowser описывает автоматические значения и явные переопределения, а также отдельные настройки локали и языка. Они дают контекст конфигурации, но не удостоверяют исторический расчёт сборщика или интерпретацию внешнего сайта. Сначала нужно установить запланированную настройку и реально сообщённое значение. Изменение настройки лишь ради удаления пометки детектора заменит объяснение исходного различия желаемым внешним видом.

Ограниченная запись поддержки сохраняет ревизию инструмента, дату сбора, сборку браузера, планируемый пояс и относящиеся к вопросу поля. Отсутствие записывается как отсутствие; пропавший объект отличается от пропавшего описания. Необработанные составные отпечатки и посторонняя история просмотра не нужны для определения ветви строки. Если доступна ошибка, можно сохранить очищенную категорию операции без сбора постороннего содержимого страницы.

Вопросы о границах отчёта

Использует ли locationMeasured разрешение геолокации?

Закреплённый путь использует исторические вычисления Date и Intl и список городов. Координаты не запрашиваются. Название поля не доказывает диалог разрешения, наблюдение GPS или текущую страну.

Является ли locationEpoch временем сбора отчёта?

Нет. Это локальная историческая июльская дата, построенная с 1113. Время сбора хранится отдельно. Подстановка исторической метки в роль времени отчёта меняет смысл значения.

Подтверждает ли равное текущее смещение историческое сравнение?

Нет. offset и offsetComputed используют текущую дату, а кандидаты - выбранный исторический год. Согласие одного сравнения не доказывает согласие других входов или полной истории пояса.

Почему при расхождении на снимке может быть одно смещение?

Вывод выбирает offsetComputed, когда оно отличается от offset, не подписывая оба отдельно. Для различения равенства и этой ветви выбора нужен исходный объект.

Считает ли lied несовпадения пояса?

Проверенный сборщик наследует первое истинное значение сомнения из трёх записей методов. Он не считает несовпадения по видимым строкам положения и смещения. Происхождение оценки - отдельное свидетельство.

Доказывает ли настройка BotBrowser физическое положение?

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

Источники

Практический вывод

Отчёт полезен, пока поля сохраняют источники и даты. Отделяйте разрешённый идентификатор и текст Date от исторического пути и двух текущих смещений. Проверяйте обе исходные альтернативы за выбранной строкой и прослеживайте унаследованную оценку до назначения причины отказа. Такое разделение поддерживает конкретную диагностику, не превращая временные данные в физическое положение, личность или внешний вердикт об автоматизации.

#fingerprinting#приватность#Timezone

Эта статья входит в руководство: Что такое отпечаток браузера?

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.