Что на самом деле проверяют bot.sannysoft.com и CreepJS, как читать строку результата и почему их прохождение не гарантирует обхода реальной системы детекции.
Поищите «бот ли я» — и постоянно всплывают два названия: bot.sannysoft.com и CreepJS. Обе страницы бесплатны, не требуют регистрации и запускают набор клиентских проверок, показывая сырой результат — без скрытой оценки и без необходимых пояснений. Они популярны у QA-инженеров, тестирующих headless-пайплайны в CI, и у тех же авторов инструментов автоматизации, о которых мы писали в руководстве по техникам обнаружения ботов. В этом материале разберём, что именно проверяет каждая страница, как читать строку результата и — что важно — почему чистый результат на любой из них не равнозначен прохождению реальной боевой системы детекции.
Основные выводы
- bot.sannysoft.com запускает быструю таблицу проверок «пройдено/не пройдено» по классическим признакам автоматизации:
navigator.webdriver, объектwindow.chrome, списки плагинов и разрешений, а также строка рендерера WebGL. - CreepJS идёт дальше: это open-source проект, который сверяет одно и то же свойство браузера через несколько независимых путей кода и помечает как «ложь» случаи, когда stealth-патч изменил один путь, но упустил другой.
- Зелёная строка означает лишь то, что ваш браузер не выдал конкретный известный признак — это ничего не говорит о поведенческом анализе, сетевых отпечатках TLS/HTTP-2 или репутации IP, которые тоже оценивает реальный сайт.
- Оба инструмента — независимые проекты сообщества, а не продукты какого-либо производителя браузеров, и их точный набор проверок меняется по мере эволюции фреймворков автоматизации.
- Собственный инструмент обнаружения ботов от BrowserInsight показывает многие из тех же сигналов для вашего текущего браузера — с пояснением, что означает каждый из них.
Что на самом деле проверяют эти публичные страницы
Ни одна из страниц не является коммерческим продуктом — обе выросли из того же исследовательского сообщества, которое описано в нашем руководстве по обнаружению headless-браузеров, и обе существуют, чтобы дать любому быстрый и прозрачный ответ на вопрос «что утекает из моего автоматизированного браузера?».
bot.sannysoft.com проще из двух: загружаете страницу, и она рендерит таблицу, где каждая строка — известный признак автоматизации, окрашенный в зелёный (похоже на человека) или красный (похоже на бота). Проверяются такие вещи, как возвращает ли navigator.webdriver значение true, присутствует ли объект window.chrome, который экспонирует настоящий Chrome, имеет ли navigator.plugins правдоподобную ненулевую длину, возвращает ли Permissions API внутренне согласованные ответы, и указывает ли строка рендерера WebGL на настоящее GPU-оборудование, а не на программный растеризатор. Это ровно те категории, которые подробно рассмотрены в нашем руководстве по техникам обнаружения ботов — страница Sannysoft просто позволяет быстро увидеть их применительно к собственному браузеру.
CreepJS (исходный код на github.com/abrahamjuliot/creepjs) — гораздо более крупный open-source проект под лицензией MIT, созданный специально для того, чтобы ловить спуфинг и stealth-инструменты, а не только голую, непропатченную автоматизацию. Вместо того чтобы прочитать значение один раз, он читает то же самое значение через несколько независимых путей кода — цепочку прототипов, изолированную область видимости Web Worker, отдельный глобальный объект iframe — и сравнивает их. Настоящий, немодифицированный браузер даёт одинаковый ответ по каждому пути. Если stealth-патч переопределяет navigator.webdriver в основном потоке, но забывает сделать то же самое внутри воркера, возникает расхождение, которое CreepJS помечает как «ложь». Именно эта кросс-путевая сверка делает прохождение CreepJS более сложной задачей, чем прохождение страницы Sannysoft, для тех, кто целенаправленно пытается подделать отпечаток, а не просто запускает непропатченную автоматизацию.
Как читать строку результата
Обе страницы выражают одну и ту же идею — наблюдаемое значение против ожидаемого значения для настоящего браузера, — но оформляют её по-разному.
В таблице Sannysoft каждая строка называет проверку и окрашивается в соответствии с вердиктом. Строки, на которые действительно стоит обратить внимание: WEBDRIVER (в настоящем браузере должно быть false или отсутствовать), строка CHROME (настоящий Chrome экспонирует нетривиальный объект window.chrome, многие контексты автоматизации — нет), PLUGINS-LENGTH (настоящая десктопная установка Chrome сообщает небольшой, но ненулевой список плагинов), строка PERMISSIONS (проверяет, внутренне согласовано ли состояние запрошенного разрешения, а не противоречиво ли оно), и строки vendor/renderer WebGL (программный рендерер вроде SwiftShader вместо настоящего имени GPU — один из самых сильных отдельных признаков, о чём мы писали в руководстве по обнаружению headless-браузеров).
CreepJS показывает вверху сводную оценку доверия, а затем разбивает результаты по категориям, помечая конкретные свойства индивидуально как согласованные или как обнаруженную «ложь». Одна помеченная «ложь» информативнее сводной оценки — она точно указывает, какой слой спуфинга не покрыл все пути кода, что полезно, если вы отлаживаете собственную настройку автоматизации, а не просто смотрите на итоговый балл.
Относитесь к обеим страницам как к живым проектам: точные названия строк, категории и оценки меняются по мере того, как их авторы добавляют проверки для вновь обнаруженных признаков, так что это скорее объяснение базовых категорий сигналов, чем фиксированное руководство по одной конкретной версии.
Какие сигналы важны, а какие — шум
Не все строки имеют одинаковый вес:
| Сигнал | Вес | Почему |
|---|---|---|
navigator.webdriver === true | Сильный | Настоящие браузеры никогда не сообщают это значение; так делают только непропатченные сессии WebDriver |
| WebGL-рендерер — программный растеризатор | Сильный | Подделать это требует настоящего доступа к GPU, которого лишено большинство сред автоматизации |
| «Ложь» свойства, помеченная CreepJS | Сильный | Внутреннее несоответствие, которое настоящий, немодифицированный браузер структурно не может произвести |
| Пустой или короткий список плагинов сам по себе | Слабый | Приватные браузеры и современные сборки Chrome тоже намеренно сокращают этот список |
| Отсутствие устаревших API (например, Battery Status) | Слабый/шум | Всё чаще удаляется или ограничивается в настоящих браузерах по соображениям приватности, не связано с автоматизацией |
Закономерность такова: сигналы, требующие подделать что-то структурное в том, как браузер рендерит или экспонирует свои внутренности, сложно подделать, поэтому они значимы. Сигналы, которые может вызвать и обычный, заботящийся о приватности браузер, сами по себе слабы — именно это различие между «одним сигналом» и «оценённой комбинацией сигналов» проводит наше руководство по техникам обнаружения ботов.
Чем эти тестовые страницы отличаются от реальной системы детекции сайта
Одна загрузка страницы на Sannysoft или CreepJS может измерить только то, что способна наблюдать статическая страница: этот один браузер, этот один запрос, прямо сейчас. Боевая система детекции наблюдает гораздо больше — тайминг мыши и клавиатуры на протяжении всей сессии, отпечатки рукопожатия TLS и HTTP/2 ниже уровня JavaScript, репутацию IP и скорость запросов, а также то, как данный отпечаток кластеризуется относительно тысяч других посетителей во времени. Ничего из этого не видно на одностраничном тесте, потому что для этого нужны история и сетевая видимость, которых у страницы на стороне браузера попросту нет.
Это значит, что чистый результат на обеих тестовых страницах доказывает, что ваша конфигурация избегает хорошо известных статических признаков — это действительно полезно для тех, кто аудирует CI-пайплайн или инструмент автоматизации, — но это не доказательство того, что вы пройдёте живую коммерческую антибот-систему, которая как раз и добавляет сигналы, недоступные статической странице. Если вашему автоматизированному браузеру ещё и нужен правдоподобный User-Agent, наше руководство по обнаружению спуфинга User-Agent описывает проверки на уровне заголовков и client hints, которые работают параллельно со всем вышеописанным.
Проверьте свой собственный браузер с BrowserInsight
Если вы хотите увидеть эти сигналы, объяснённые применительно к вашему текущему браузеру, а не в виде голой таблицы «пройдено/не пройдено», инструмент обнаружения ботов от BrowserInsight сообщает состояние вашего navigator.webdriver, согласованность плагинов и разрешений, а также рендерер WebGL — каждый пункт с понятным объяснением, и всё вычисляется на стороне клиента.
Часто задаваемые вопросы
Sannysoft и CreepJS — официальные инструменты Google или производителей браузеров?
Нет. Оба — независимые проекты сообщества, не связанные ни с одним производителем браузеров. Они широко используются в сообществе, изучающем обнаружение ботов и инструменты автоматизации, как неформальные прозрачные референсные проверки — а не как официальная сертификация чего-либо.
Если я получу высокую оценку доверия на CreepJS, значит ли это, что меня не заблокируют настоящие сайты?
Необязательно. Высокая оценка доверия означает лишь, что ваш браузер не срабатывает на конкретные проверки, которые запускает CreepJS. Антибот-система реального сайта также оценивает поведение, сетевые отпечатки, репутацию IP и историю по многим запросам — ничего из этого одна загрузка тестовой страницы оценить не может.
Почему Sannysoft и CreepJS иногда расходятся во мнении об одном и том же браузере?
Они проверяют разные вещи на разной глубине. Sannysoft фокусируется на меньшем наборе классических, хорошо известных признаков; CreepJS сверяет множество свойств через независимые пути кода специально для того, чтобы поймать спуфинг, уже обходящий более простые проверки. Одна и та же настройка может выглядеть чистой на одной странице и получить пометку на другой.
Законно ли использовать эти страницы для проверки собственной настройки автоматизации?
Да — это одно из самых распространённых применений. QA-команды, запускающие headless-браузеры в CI, и исследователи, изучающие техники детекции, используют эти страницы, чтобы увидеть именно то, что может заметить слой детекции целевого сайта в их настройке, прежде чем она попадёт в продакшен.


