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

Сигналы Math в CreepJS: источники полей

Разберите результаты Math, эталонные флаги браузеров, повторные вызовы и lie-состояние CreepJS, не принимая метки исходника за текущие измерения.

BotBrowser Team

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

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

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

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

TL;DR

  • Закреплённый src/math/index.ts выполняет выбранные функции и сохраняет результат под подписью выражения.
  • chrome, firefox, torBrowser и safari сравниваются с константами исходника, а не измеряют текущее семейство браузера.
  • Повторный вызов и унаследованное lieProps.Math.* являются разными источниками состояния.
  • Отсутствующее или заблокированное значение описывает путь вывода, но не человека, устройство или вердикт о боте.
  • Для воспроизводимости нужны commit, файл и диапазон строк.

Contents

Схема разделяет входы Math, результат, эталонные метки и унаследованную оценку CreepJS.

Закреплённый исходник и входы

Речь идёт о публичной версии 10aa6724cd33a1015db1574211890518cd04f0cc. В src/math/index.ts список check содержит 23 метода Math, включая acos, cos, hypot, sin, sqrt и pow. Первый цикл читает lieProps[Math.<method>], вызывает функцию с фиксированными аргументами и сравнивает два вызова. Два значения NaN считаются совпавшими; остальные сравниваются оператором равенства. Несовпадение устанавливает локальный флаг lied и вызывает регистратор.

Вторая таблица устроена иначе. В ней есть выражения вроде cos(Math.PI) и pow(Math.SQRT2, -100). Строка хранит ожидаемое значение и необязательные значения с метками chrome, firefox, torBrowser и safari. Это сопоставление выражения с эталонными слотами, а не доказательство реального запуска в каждом браузере. ОС и версия, породившие каждую константу, рядом со строкой не указаны.

Таблица неоднородна: у некоторых функций одна строка, у других несколько. cos включает большие величины и Math.E, hypot включает вызовы с двумя и шестью аргументами, pow использует разные основания со степенью -100. Единая «оценка Math» скрывает форму входных данных. Выражение является частью свидетельства, а не просто подписью.

Первичная проверка повторов и таблица эталонов также используют разные аргументы. Например, повторный cos вызывается с 1e308, а эталонные строки включают 0.123, Math.PI и другие выражения. Успешный повтор не означает совпадения другой строки с константой. Эти проверки нельзя объединять.

Спецификация Math в ECMAScript определяет семантику языка, но не делает константы CreepJS текущей гарантией совместимости. Сохраняйте выражение, аргументы и revision исходника рядом с интерпретацией.

Четыре вида выхода Math

Объект data использует текст выражения как ключ, а значение создаётся через attempt(). В обычной строке result содержит вычисление, а четыре названия браузеров являются булевыми сравнениями. Они отвечают на вопрос «равен ли результат этому слоту исходника?», а не «каким браузером пользуется человек?». Совпадение с несколькими слотами или ни с одним не устанавливает идентичность браузера.

Локальная проверка равенства представляет отдельный сигнал. Некоторые функции вызываются дважды с теми же аргументами. Несовпадение указывает на нестабильность именно этой проверки, но код не объясняет причину. Запишите метод, аргументы, доступные значения и commit. Один lied теряет эти детали.

Унаследованное состояние Math читается из lieProps, которым управляет отдельный модуль lies; там также есть общий поиск методов Math. Это связанные, но разные источники. Отдельно фиксируйте «метод уже помечен», «повторные вызовы различаются» и «значение совпало с эталоном». Статья о группах сигналов и ограничениях CreepJS объясняет общий контекст, а не происхождение каждой Math-строки. Руководство по согласованности Math между браузерами рассматривает правила операций и прикладные допуски.

Поле или путьИсточник в закреплённом кодеДопустимая трактовкаЧто не доказано
resultMath[fn] или выражение polyfillзначение для указанного входаличность или устройство
четыре браузерных флагаравенство со слотом строкисравнение с меткой исходникатекущее семейство или версия
локальный liedlieProps и несовпадение вызововзаписано унаследованное или локальное состояниепричина и автор изменения
undefined из attemptисключение или недоступность callbackвызов не вернул значениеточная причина
результат модуля отсутствуетвнешняя ошибка сборщикаобычный объект не возвращёнотсутствие всех API Math

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

Список содержит acos, acosh, asin, asinh, atan, atanh, atan2, cbrt, cos, cosh, expm1, exp, hypot, log, log1p, log10, sin, sinh, sqrt, tan, tanh и pow. Имя метода связывает наблюдаемое отличие со спецификацией и точными аргументами.

Аргументы показывают численную область каждой строки. cos(1e308) использует очень большую величину, atanh(0.5) даёт внутреннее значение, atan2(1e-310, 2) использует очень малую компоненту, а hypot(1, 2, 3, 4, 5, 6) передаёт более двух операндов. Это перечисление не объясняет, почему реализация вернула число; оно лишь описывает выбранный исходником случай. Для диагноза нужна контролируемая проверка на той же сборке и в том же контексте приложения.

Некоторые значения близки, но различаются в последних разрядах. Для atan(2) источник содержит 1.1071487177940904, а другой слот содержит 1.1071487177940906. Это не универсальный допуск. Выбор точного равенства, допуска или прикладной проверки зависит от ECMAScript и требований приложения.

NaN в массиве эталонов может обозначать отсутствие численной ссылки в данной колонке; это не измеренный NaN реального Firefox, Tor Browser или Safari. Сравниватель считает пустую ссылку несовпадением. Корректная запись: «в исходнике нет эталона для строки», а не «этот браузер вернул NaN».

Сокращённый hash и lied в HTML являются оформлением, а не криптографическим доказательством принадлежности двух сессий одному пользователю. Для поддержки сохраняйте revision и нужную строку, а не полную строку отпечатка.

Отсутствующее, заблокированное и унаследованное состояние

attempt() превращает исключение callback в недоступное значение. Поэтому undefined может означать исключение, отсутствие метода или другую границу вызова; категория исключения не сохраняется в отображаемой ячейке. Не подставляйте предполагаемую метку браузера.

У getMaths() есть внешний try/catch. Если ошибка выходит за пределы строки, весь модуль регистрирует неуспешный тест и не возвращает обычный объект. Это не то же самое, что одна пустая строка. Заблокированная карточка также может зависеть от отображения. Сохраняйте эти состояния раздельно.

Метки браузеров являются историческими данными исходника, а не benchmark. Другая версия Chromium, настройки профиля или commit CreepJS могут дать иной результат, совместимый со спецификацией. Руководство по согласованности Math между браузерами описывает прикладные допуски и правила операций.

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

Константы привязаны к commit, но исходная сборка и ОС каждой строки не задокументированы. Перед сравнением отчётов разных дат проверьте изменения сборщика и вспомогательного кода. Если происхождение не указано, так и запишите: «в этом исходнике не указано».

Матрица происхождения

Строка проверкиЧто записатьПравило
Источникcommit 10aa6724…, файл, строкибез производителя интерпретации нет
Входвыражение и аргументысравнивать только одинаковые входы
Результатresult, undefined или отсутствие модулянеизвестное сохраняется как неизвестное
Эталонистинные булевы флагисовпадение с исходником, не идентичность
Повторметод и совпадение вызововотдельно от эталона
liedунаследованный lieProps или локальное различиене превращать в составную оценку
ХранениеID обращения и дата удалениятолько минимально нужные данные

Записи для разных путей исходника нужно хранить отдельно. Строка эталонного сравнения для cos(Math.PI) содержит result=-1 и соответствующие семейные флаги на строке 86; результата повторного вызова в ней нет. Проверка повторных вызовов использует cos(1e308) на строках 42-49, поэтому сначала записывают результаты обоих вызовов отдельно и только затем выводят repeatMatch. lieProps.Math содержит присутствующие ключи отклонений, а не исходное поле Math.cos=false; отсутствие ключа не означает записанный false. Эти строки не определяют браузер посетителя и не предсказывают решение внешнего сервиса.

Для сравнения двух отчётов сначала зафиксируйте одинаковый commit, затем одинаковые выражение и аргументы, после этого сопоставьте result, флаги эталонов и происхождение lied. Разные входы или revision не дают контролируемого сравнения. Эталонный boolean зависит от того же результата, а lied читает другое состояние; это не три независимых голоса.

BotBrowser поддерживает настройку поверхностей профиля для разрешённого сравнения, но не гарантирует, что внешняя версия CreepJS присвоит результату определённую метку. Храните настройки профиля, разбор исходника и прикладной результат отдельно. Не добавляйте cookies, историю браузера или данные аккаунта, если они не нужны для конкретной поддержки.

FAQ: поля Math в CreepJS

Определяют ли chrome и firefox используемый браузер?

Нет. Это совпадения с константами закреплённого исходника, а не подтверждение текущего семейства.

Означает ли lied: true, что Math-тест провален?

Нет. Состояние может объединять унаследованный lieProps и несовпадение повторных вызовов.

Объясняет ли undefined, какой API отказал?

Нет. Callback скрывает категорию исключения; нужна независимая диагностика.

Является ли таблица сравнительным benchmark?

Нет. Это константы и сравнения, объявленные в конкретной версии исходника.

Practical conclusion

Закрепите commit CreepJS, выражение и аргументы; храните результат, эталонные флаги, повторный вызов и происхождение lied отдельно. Заблокированные и пустые пути считайте неизвестными. Тогда публичный отчёт можно проверить, не превращая метку исходника в идентичность или вердикт безопасности. Когда результаты отдельных сигналов показываются вместе, разбор агрегации предсказаний CreepJS прослеживает сокращение кандидатов и состояния отображения, не превращая их в идентификатор.

Public sources

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

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

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

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