Сигналы 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
- Отсутствующее, заблокированное и унаследованное состояние
- Матрица происхождения
- FAQ: поля Math в CreepJS
- Practical conclusion
Закреплённый исходник и входы
Речь идёт о публичной версии 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 между браузерами рассматривает правила операций и прикладные допуски.
| Поле или путь | Источник в закреплённом коде | Допустимая трактовка | Что не доказано |
|---|---|---|---|
result | Math[fn] или выражение polyfill | значение для указанного входа | личность или устройство |
| четыре браузерных флага | равенство со слотом строки | сравнение с меткой исходника | текущее семейство или версия |
локальный lied | lieProps и несовпадение вызовов | записано унаследованное или локальное состояние | причина и автор изменения |
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
Эта статья входит в руководство: Что такое отпечаток браузера?
Похожие статьи
Отчёт Intl CreepJS: поля и отсутствующие значения
ОтпечаткиАудиоотчёт CreepJS: рендеринг и пропуски
ОтпечаткиОтчёт CreepJS WebGL: контексты и сигналы
ОтпечаткиСигналы Android WebView в CreepJS: границы вывода
ОтпечаткиПредсказание CreepJS: агрегация и неизвестные состояния
ОтпечаткиОтчёт BrowserLeaks WebGL: сбор и отсутствующие данные
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.