Расширение редко выдаёт вас самим фактом установки. Проблема в том, что оно меняет измеряемые страницей значения, и браузер перестаёт сам себе соответствовать.
Да, но не по той причине, о которой обычно думают. Расширение почти никогда не попадает под подозрение просто потому, что оно установлено. Вас помечают тогда, когда оно меняет то, что страница может измерить, и браузер перестаёт быть внутренне согласованным: User-Agent говорит одно, платформа другое, а свойство, которое должно быть нативным, оказывается JavaScript-функцией.
Детекторы воспринимают такое расхождение как «кто-то вмешивается в работу этого браузера», а вмешательство снаружи выглядит именно как автоматизация. Ниже разобраны категории расширений, которые это вызывают, какой сигнал ломает каждая из них и почему детектор оценивает это именно так.
Ключевые выводы
- Флаг ставит нарушенная согласованность, а не само расширение. Страница сравнивает значения, которые должны совпадать (User-Agent и платформа, верхнее окно и iframe, геттер и нативный код). Расширение правит одну сторону и создаёт рассогласование.
- Шесть категорий дают большую часть проблем: переключатели user-agent, антифингерпринтинговые инструменты и шум для canvas, расширения, переопределяющие свойства
navigator, менеджеры прокси/VPN, забытые помощники автоматизации и инструменты разработчика. navigator.webdriver— не сигнал расширений. Его выставляют фреймворки автоматизации; обычные расширения — нет. Если винить его в ложном срабатывании, искать придётся не там.- Детекторы оценивают сочетания. Один странный сигнал редко кого-то блокирует, но два-три вместе могут превысить порог сайта.
- Решение — диагностика: найдите расширение, ломающее согласованность, и отключите его на проблемном сайте.
Как расширение становится сигналом бота
Скрипт обнаружения ботов не спрашивает, какие расширения у вас запущены. Если вас интересует, как это делается, в статье об угрозах приватности от расширений описано, как страницы находят установленные расширения. Здесь мы начинаем на шаг позже: расширение уже есть, и оно изменило то, что страница может наблюдать.
Большинство изменённых значений приходит из двух мест. Либо контент-скрипт меняет картину браузера для страницы, например переопределяя свойство в контексте страницы, как описано в документации Chrome по контент-скриптам. Либо расширение меняет сетевой уровень, а с ним заголовки или видимый IP. В любом случае у страницы оказываются два источника, которые должны совпадать, но не совпадают.
Шесть категорий
1. Переключатели user-agent и платформы
Они подменяют строку User-Agent, обычно чтобы открыть сайт «как другой браузер или устройство». Строка меняется, а остальной браузер — нет. navigator.platform, заголовки Client Hints, поведение движка отрисовки и объект navigator внутри iframe по-прежнему могут сообщать реальный браузер.
Строка Chrome под Windows рядом с платформой Linux и набором возможностей, свойственным только Firefox, — ровно то противоречие, которое ищет детектор. Механику мы разбирали в статьях почему подмена user-agent бьёт по вам же и как сайты обнаруживают подмену user-agent.
2. Антифингерпринтинговые расширения и шум для canvas
Инструменты, рандомизирующие вывод canvas или аудио, пытаются помешать снятию отпечатка. Но стабильное устройство каждый раз возвращает один и тот же результат canvas. Если два чтения одного и того же рисунка дают разные пиксели, выдаёт именно случайность. Аккуратные реализации этого избегают, наивные — нет. Компромиссы описаны в статье про шум в отпечатке canvas.
3. Расширения, переопределяющие свойства navigator
Некоторые расширения подменяют navigator.userAgent, navigator.languages и подобные значения, определяя вместо них собственный геттер на JavaScript. Нативный геттер при передаче в Function.prototype.toString выводит function get userAgent() { [native code] }. Замена, написанная на JavaScript, выведет собственный исходный код.
Страница может также исследовать свойство через Object.getOwnPropertyDescriptor и увидеть, что геттер находится там, где обычно его нет. Так работает «детектор лжи» в CreepJS, сверяющем доверенные и недоверенные значения.
4. Расширения-менеджеры прокси и VPN
Менеджер прокси меняет выходной IP, но не системный часовой пояс, список языков и локаль. IP говорит об одной стране, браузер — о другой. Это стандартный входной сигнал риска, и он срабатывает и у тех, кто ничего плохого не делал. См. несовпадение часового пояса и IP и почему обнаружение VPN даёт ложные срабатывания.
5. Забытые помощники автоматизации
Решатели CAPTCHA, рекордеры макросов, автозаполнение форм и менеджеры пользовательских скриптов действуют на странице так, как человек не действует: мгновенно заполняют поля, порождают синтетические события, кликают без предшествующего движения мыши. Менеджер пользовательских скриптов — это просто инструмент, запускающий ваши собственные скрипты на выбранных страницах, как описывает API userScripts в Chrome. Сам инструмент нейтрален, но то, что он делает с таймингом и событиями ввода, как раз и измеряют поведенческие детекторы.
6. Инструменты разработчика и эмуляция
Открытые DevTools и эмуляция устройства меняют размеры окна, поддержку касаний и тайминг некоторых вызовов. Настольный браузер, который называет себя телефоном, но с мышью и без точек касания, выглядит несогласованным. Это легко вызвать случайно и так же легко исправить: закройте DevTools.
Блокировщики рекламы — отдельный случай: они мешают приманкам, а не свойствам браузера. У них есть собственный разбор.
А как же navigator.webdriver?
navigator.webdriver равен true, когда браузером управляет фреймворк автоматизации. Обычные расширения его не выставляют. Если вас пометили, а webdriver показывает false, причина — одна из проблем согласованности выше, а не этот флаг. Верно и обратное: автоматизированный браузер с чистым списком расширений всё равно сообщит true.
Почему попадают и честные пользователи
Расширения для приватности и доступности легитимны, и детекторы это знают. Поэтому они оценивают сочетания, а не отдельные сигналы. В обзоре методов обнаружения ботов объясняется, как множество слабых сигналов складывается в один вердикт, а как сайты помечают ваш браузер показывает ту же оценку глазами посетителя.
Хуже всего, когда всё складывается вместе: переключатель user-agent плюс шум для canvas плюс расширение прокси. По отдельности каждое оправданно. Вместе они дают странице три разные причины не доверять браузеру.
Как выяснить, какое расширение виновато
Гадать не нужно. Наш инструмент обнаружения ботов выполняет проверки целиком в вашем браузере и показывает, какие строки сработали. Он не обнаруживает и не перечисляет установленные расширения, а находит их последствия: подменённые геттеры navigator, iframe с User-Agent, отличным от верхнего окна, рандомизированный вывод canvas, несовпадение платформы с ядром, webdriver, а также DevTools и эмуляцию.
- Запустите проверку при включённых расширениях и запишите сработавшие строки.
- Откройте чистый профиль без расширений и запустите её снова.
- Сравните. Строка, которая из сработавшей стала пройденной, указывает на категорию для разбора.
- Включайте расширения по одному, пока строка не вернётся.
Если вас блокирует конкретный сайт, отключите проблемное расширение для этого сайта, а не удаляйте его везде. Это диагностическая процедура, а не способ что-то скрыть: если расширение меняет то, что сообщает ваш браузер, честный результат — это согласованная картина.
Часто задаваемые вопросы
Помечают ли меня просто за установку расширения?
Нет. Само наличие — не сигнал. Флаг возникает из измеримого рассогласования, которое вносит расширение, или из поведения вроде мгновенного заполнения форм.
Может ли расширение для приватности сделать меня похожим на бота?
Может. Подмена значений или рандомизация вывода создаёт рассогласования, которых нет у обычного браузера, а редкая конфигурация к тому же легче опознаётся.
Выставляют ли расширения navigator.webdriver?
Нет. Его выставляют фреймворки автоматизации. Обычные расширения оставляют false.
Как понять, какое расширение виновато?
Запустите одну и ту же проверку с расширениями и в чистом профиле, затем включайте их по одному, следя, какая строка меняется.


