← Все отчёты

Прогон детекторов, август 2026 - одна из четырёх проверок нас заблокировала

11 мин чтения detection-reportwhoercreepjsdatadomekasadaplaywright-stealth

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

Условия

Прогон начат 2026-08-02 00:18 UTC
Прогон завершён 2026-08-02 00:21 UTC
Ядро Chrome 150
Профиль только что создан, настройки по умолчанию, ничего не подкручено
Прокси управляемый резидентный, выход 149.52.102.108, Хьюстон, США
Хост macOS, с интерфейсом

Профиль был создан и использован один раз. Без прогрева, без истории, без подстройки под сайты. Это намеренно самый слабый реалистичный случай.

Что предъявлял профиль

User-Agent    Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Chrome/150.0.0.0
platform      Win32
languages     en-US, en
timezone      America/Chicago
webdriver     false
hardware      8 ядер, 16 ГБ, 1536x864
WebGL vendor  Google Inc. (Intel)
WebGL render  ANGLE (Intel, Intel(R) UHD Graphics 620 Direct3D11 vs_5_0 ps_5_0, D3D11-27.20.100.9316)

Прокси выходит в Хьюстоне, и браузер сообщил America/Chicago. Эта привязка автоматическая, и именно её чаще всего портят вручную.

Результаты

Проверка Результат Подробности
whoer.net Пройдено Маскировка 100%. Прокси: нет. Анонимайзер: нет. Чёрный список: нет. ОС прочитана как Win10.0, браузер как Chrome 150.0
CreepJS Без результата Страница загрузилась (HTTP 200) и выдала идентификатор отпечатка, но наша обвязка не смогла прочитать поля с оценками. Наша вина, а не результат
DataDome (leboncoin.fr) Заблокировано HTTP 403, отдана капча, тело 1206 байт. До объявлений не дошли
Kasada (footlocker.com) Пройдено HTTP 200, отрисована настоящая витрина, тело 1,59 МБ, без промежуточной страницы

Очевидный вопрос к этой таблице - сколько на тех же проверках набирает бесплатная альтернатива. Мы измерили это позже в том же месяце, на тех же целях и через тот же прокси; результат в разделе «Базовая линия» внизу страницы.

Побочное наблюдение: STUN не разрешился

Не входит в четыре проверки, но повторялось в логе ядра на протяжении прогона и стоит записи:

Failed to resolve address for stun.l.google.com., errorcode: -105

Разрешение STUN через этот прокси не работало всю сессию, поэтому WebRTC не собрал ни одного server-reflexive (srflx) кандидата. Это не утечка, которой обычно опасаются, но и не чистое прохождение. Браузер, вообще не выдающий кандидата srflx, - собственный небольшой сигнал, и мы его записываем, а не подшиваем в графу «утечек WebRTC не обнаружено».

Мы не проектировали прогон под измерение этого и не изучали, как часто такое случается, так что относитесь к этому как к наблюдению, а не к результату. Оно в списке на сентябрьский прогон.

Уточнение от 2026-08-13: это наблюдение не пережило измерения. Обвязка теперь проверяет WebRTC намеренно, а не вычитывает лог ядра, и во всех прогонах с тех пор браузер собирал кандидата srflx, и это был адрес выхода прокси, а собственный адрес хоста не появлялся нигде. Ошибка резолвера в логе осталась. Чего бы она ни стоила, это не отсутствие кандидата, так что абзац выше описывает одну сессию, а не этот прокси вообще.

О провале с DataDome

Перечитайте эту строку, она здесь самая интересная.

leboncoin.fr вернул 403 с капчей. Профиль не прошёл. Предыдущий снимок этой же цели, сделанный неделями раньше и на момент написания всё ещё висевший на нашей главной странице, показывал прохождение. Сегодня - нет.

Мы пошли и измерили это, а не остались при догадке. Перепрогон внизу этой страницы провёл двенадцать адресов выхода через ту же цель 2026-08-13, наше ядро и Playwright со stealth-плагином в паре внутри каждого соседства адресов: адрес выхода решил пять раундов из шести, браузер - максимум один. Общий ответ такой: 403 здесь - сначала вопрос об адресе и только потом вопрос о браузере.

Чего это не делает - так это не объясняет задним числом именно этот прогон. Другой адрес из того же блока 149.52.* прошёл одиннадцатью днями позже, так что назвать сожжённым тот адрес, которым мы пользовались 2026-08-02, мы не можем. Замечания ниже - это то, что мы честно могли сказать тогда, до всяких измерений, и они остаются как были:

Сказать мы можем нечто более узкое и более полезное: слой отпечатка выглядел согласованным (whoer 100%, прокси не определён, признаков автоматизации нет), и одна коммерческая стена его пропустила, а другая нет.

Провал с CreepJS и поправка к тому, что мы написали здесь сначала

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

Первая версия этой страницы называла это багом обвязки и обещала починить к сентябрьскому прогону. Это было слишком самоуверенно, и вот поправка. Мы попробовали. Извлечение действительно было неверным, CreepJS отрисовывает свои оценки в shadow root, а не в тело документа, но починка этого вскрыла проблему крупнее: на нашем тестовом хосте CreepJS стабильно роняет процесс отрисовки вместе с собой, а когда тот умирает, умирают и отладочное соединение, и весь прогон. Девять попыток, несколько разных видов отказа, чисел нет.

Теперь CreepJS запускается отдельным изолированным вызовом, чтобы при падении он стоил только себя, а не всех проверок после него. Удастся ли вообще снять его оценки в сентябре - честно открытый вопрос. Если не удастся, эта строка снова так и скажет, а не исчезнет тихо.

Методика, чтобы вы могли повторить

  1. Создайте профиль в приложении или через openProfile(). Ничего не меняйте.
  2. Привяжите резидентный прокси. Часовой пояс, локаль и геолокация последуют за выходным IP автоматически.
  3. Откройте в одной сессии: whoer.net, abrahamjuliot.github.io/creepjs, leboncoin.fr, footlocker.com.
  4. Запишите HTTP-статус и результат на странице для каждой цели.

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

Если ваш результат отличается от нашего, не доверять стоит нашему: мы прогнали один профиль через один прокси с одной машины.

Что мы изменили из-за этого прогона

На нашей главной странице висит скриншот DataDome из более раннего снимка, показывающий прохождение, и этот прогон ему противоречил, поэтому мы пометили скриншот как устаревший и поставили ссылку сюда.

Позже мы вернули подпись к обычному «пройдено», и это заслуживает объяснения, а не тихой правки. Перепрогон внизу страницы показал, что адрес выхода решает пять раундов из шести: один и тот же адрес блокировал оба браузера, а другой пропускал оба. При таком прочтении один 403 с одного адреса не доказывает, что снимок был неверным, а пометка «устарело» подразумевала уверенность в обратную сторону, которой у нас тоже не было. Скриншот по-прежнему показывает один удачный день и по-прежнему ведёт сюда.

Воспроизведено позже в тот же день

Мы повторили прогон тем же профилем и прокси по тем же целям спустя несколько часов. whoer снова показал 100% маскировки, а leboncoin.fr во второй раз вернул 403 с капчей. Дважды воспроизведённая блокировка в один день с одним и тем же выходным IP - слабое свидетельство о DataDome вообще и разумное свидетельство того, что этот конкретный результат не был случайностью.

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

Базовая линия: playwright плюс stealth-плагин

Сравнение, которое стоит публиковать, - не с другим платным вендором. Это Playwright со stealth-плагином: он бесплатный, и именно с ним нас чаще всего сравнивают. Поэтому мы прогнали его через те же четыре проверки.

Эта часть измерена 2026-08-13, а не 2026-08-02, поэтому с таблицей выше она не сопоставима. Она сопоставима сама с собой.

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

AntiBrow Playwright + stealth-плагин
Движок наше ядро, Chrome 151 Chromium из поставки Playwright, Chrome 148
Где подменяется отпечаток в движке из внедрённого JavaScript
Маскировка whoer.net 90% 90%
ОС по версии whoer Win10.0, совпадает с UA Mac OS X, то есть хост
Прокси замечен whoer нет нет
Kasada (footlocker.com) Пройдено, 200, витрина отрисована Пройдено, 200, витрина отрисована
Кандидат WebRTC srflx адрес выхода 202.66.x.x, собственный адрес хоста
Часовой пояс против выхода America/Los_Angeles, совпадает Asia/Shanghai, пояс хоста
navigator.languages en-US, en zh-CN, zh, языки хоста

Главная цифра whoer их не развела, и Kasada пропустил обеих. Если вы пришли за графиком, где платный продукт проходит, а бесплатный падает, этот прогон не про то.

Разница - в нижних трёх строках, и это не оценка, а связность. Базовая линия объявляла адрес выхода в Лас-Вегасе, сообщая при этом часовой пояс машины в Азии, язык этой машины и WebRTC-кандидата с её настоящим адресом. Любого из этого хватает на один запрос со стороны сайта, которому не всё равно. Плагин свою работу сделал: он прячет следы автоматизации, webdriver был false, и whoer прочитал браузер как обычный Chrome на macOS.

Одна деталь говорит за всё остальное. Whoer отдал базовой линии китайскую версию страницы, потому что Accept-Language был хостовым. Мы это заметили потому, что разбор оценки, ищущий английскую подпись, вернул пустоту.

Что это показывает, а что нет:

Точный состав: playwright-extra с puppeteer-extra-plugin-stealth, текущие версии, конфигурация по умолчанию, с окном, тот же резидентный выход.

DataDome потребовал другого эксперимента, и первый был неверным

DataDome имеет состояние по адресу выхода, поэтому это единственная проверка, которую нельзя прогнать так же, как всё остальное на этой странице. В первой попытке обе стороны шли через один выход с разницей в несколько минут, обеих заблокировало, и мы едва не опубликовали это как ничью. Это не результат: второй посетитель с адреса, только что использованного на той же цели, находится не в том же положении, что первый, а общий адрес означает и общую репутацию, так что один плохой адрес блокирует обе стороны и выглядит как совпадение.

Переделка, один раунд на соседство адресов:

Шесть раундов, двенадцать адресов, leboncoin.fr:

Блок адресов AntiBrow Playwright + stealth
149.40.* Пройдено Пройдено
149.87.* Пройдено Пройдено
149.52.* Пройдено Пройдено
149.88.* Пройдено Пройдено
148.135.* Заблокировано Заблокировано
192.200.* Пройдено Заблокировано
5 / 6 4 / 6

Адрес решил пять раундов из шести, браузер - максимум один. Пять пар совпали между собой и разошлись с соседними блоками. Одна пара разошлась, в нашу пользу. Одно расхождение из шести не доказывает ничего; опубликуй мы 5/6 против 4/6 как победу, следующий раунд мог бы её перевернуть, и цитировать нас на этом было бы заслуженно.

Что здесь действительно установлено - то, что стоит знать до того, как потратить день на отладку отпечатка: на этой проверке адрес выхода перевесил всё остальное, что мы меняли. 403 с капчей - сначала вопрос об адресе и лишь потом вопрос о браузере.

Два ограничения. Это только главная страница, а на входе, поиске и оформлении заказа политика строже. И базовая линия здесь - Playwright со stealth-плагином, который как раз прячет следы автоматизации; неисправленная автоматизация - противник слабее и так не выступила бы.

О нашем собственном числе

Наша сторона набрала на whoer 90% 2026-08-13 и 100% 2026-08-02. Продукт тот же, адрес выхода разный, и базовая линия через тот же выход в тот же день набрала те же 90%. Мы не знаем, за что именно whoer снял балл, и не будем гадать в выгодную нам сторону. Ровно поэтому серия печатает адрес выхода рядом с оценкой.

Ядро между двумя прогонами тоже разное, Chrome 150 в августе и Chrome 151 в паре с базовой линией, потому что новые профили привязываются к самой свежей опубликованной сборке, а не к замороженной.

Следующий прогон: 2026-09-01. Та же методика, теперь с базовой линией рядом. CreepJS изолирован, чтобы не стоить остальным проверкам, и без обещаний, что он выдаст число.

Что такое профиль на самом деле или проверьте свой по тому же списку.

Как ссылаться на этот прогон

Результаты на этой странице под CC BY 4.0. Указание авторства - условие лицензии, а ссылка - обычный способ его дать. Готовый фрагмент ниже.

AntiBrow, “Detection run, August 2026,” 2026-08-02.
<a href="https://antibrow.com/reports/detection-2026-08">antibrow.com/reports/detection-2026-08</a>
(CC BY 4.0)
AntiBrow. Detection run, August 2026 (2026-08-02). https://antibrow.com/reports/detection-2026-08. CC BY 4.0.
@misc{antibrow_2026_08,
  title  = {Detection run, August 2026},
  author = {AntiBrow},
  year   = {2026}, month = {8},
  url    = {https://antibrow.com/reports/detection-2026-08},
  note   = {CC BY 4.0}
}
Машиночитаемые данные JSON CSV Методика

Оба файла отдаются с Access-Control-Allow-Origin: *, поэтому их можно запрашивать прямо со своей страницы.

Попробуйте на бесплатном тарифе.

Неограниченное число локальных профилей, без карты. Проверьте результат детекторами сами.