
Canvas и WebGL часто представляют как простую кнопку в антидетект‑браузере: включил шум — получил новый отпечаток и пошёл работать. На деле всё сложнее. Сайты используют отпечатки Canvas и WebGL потому, что они отражают не только особенности браузера, но и весь процесс формирования изображения системой — от видеокарты и драйверов до ОС, шрифтов и параметров рендеринга. Именно эта комбинация позволяет им отличать устройства друг от друга и проверять подлинность среды. Но нужно знать и понимать что сгенерированная картинка может быть на 100% такой же как у видео-карты из такой же серии. Например: Nvidia GeForce RTX 4060 может создавать то же самое, что Nvidia GeForce RTX 5080 – тут серии разные, но работает одинаково. Также стоит сказать, что две видео карты с одинаковым названием, могут генерировать немного разные картинки.
Исследователи писали об этом ещё в работе Pixel Perfect: Fingerprinting Canvas in HTML5: один и тот же тест на Canvas/WebGL дает стабильный результат на одной и той же связке браузера, ОС и графики. Tor Browser в своей документации тоже называет Canvas одним из заметных рисков для fingerprinting и объясняет, что хеш отрисованной картинки может работать почти как трекинг куки, если его ничем не ограничивать: The Design and Implementation of the Tor Browser.
Главная мысль: проблема не в самом факте «у меня есть фиксированный или даже уникальный Canvas». Проблема в том, когда отпечаток выглядит неестественно, меняется хаотично или конфликтует с остальными параметрами профиля. То есть, не соотвествует такому же Canvas, созданному на идентичной конфигурации ОС, шрифты, видео-карта.
Canvas — это обычный HTML API для рисования. Сайт может создать невидимый пользователю canvas, нарисовать на нём текст, фигуры, градиенты, эмодзи, линии с разным сглаживанием, а потом использовать результат.
Для пользователя ничего не происходит: окно не мигает, картинка не появляется. Но в памяти браузера есть набор пикселей. Его можно захешировать и получить короткую строку.
Почему у людей получаются разные значения:
Это не означает, что сам по себе Canvas всегда даёт уникальный отпечаток для конкретного человека. Но он добавляет ещё один слой данных к общей картине — вместе с User‑Agent, параметрами экрана, таймзоной, языком и WebGL — в совокупности эти элементы позволяют сайтам отличать разные устройства и проверять, насколько среда реальна или подменена.
WebGL похож на Canvas, но работает через графический пайплайн. Сайт может не только отрисовать картинку и сравнить пиксели, но и запросить параметры графики: поддерживаемые расширения, лимиты, точность шейдеров, соответствие vendor/renderer.
Для антифрода тут важен не один параметр, а согласованность. Если профиль говорит «обычный Chrome на macOS», а WebGL выглядит как серверный Linux с программным рендерером, это заметно. Если User-Agent заявляет одно устройство, а графический стек похож на другое, это тоже не выглядит органично.
Самый простой способ «защитить» Canvas — перехватить методы вроде HTMLCanvasElement.prototype.toDataURL и подменить результат через JavaScript. Так работают многие JS расширения и самодельные патчи: сайт просит картинку, скрипт чуть меняет пиксели или возвращает заранее подготовленный ответ.
Проблема в том, что такая подмена тоже видна.
Сайт может проверять не только итоговый хеш, но и поведение функций. Например, у нативных функций в JavaScript есть характерное представление через Function.prototype.toString(); MDN показывает, что встроенные функции возвращают строку с [native code]: Function.prototype.toString(). Если метод переопределён неаккуратно, это видно сразу.
Хороший практический разбор есть у Castle: они показывают, как canvas-noise часто реализуется через перехват toDataURL, и какие проверки помогают заметить подмену: Detecting noise in canvas fingerprinting.
Постоянно меняющийся Canvas не гарантирует, что браузер пользователя вне подозрений. Иногда, наоборот сайты видят нестандартное поведение: браузер отличается от обычного Chrome и работает с изменёнными нативными API.
В антидетект-маркетинге часто звучит фраза «100% уникальный fingerprint». Звучит красиво, но для доверия это сомнительная цель.
Сайтам важна не уникальность ради уникальности. Им важны стабильность, правдоподобие и соответствие ожидаемым кластерам устройств. Обычный пользователь редко выглядит как случайно собранный набор параметров: один GPU от Windows-ноутбука, шрифты от Linux, таймзона из одной страны, язык из другой, WebGL-рендерер от третьей.
Исследование Hiding in the Crowd хорошо показывает логику «толпы»: авторы собрали более 2 млн браузерных отпечатков и обнаружили, что не все отпечатки уникальны. Но они также отмечают важную вещь: если у неуникального отпечатка меняются отдельные признаки, он с большой вероятностью становится уникальным. Для антидетекта это прямой урок: ломать один параметр без согласования с остальными опасно.
Итого: если у вас отпечаток генерации картинки уникальный – скорее всего вы используете плохой антидетект браузер. Но стоит ориентироваться по вашим потребностям, если сайты с которыми вы работате не банят вас за уникальный Canvas fingerprint – продолжайте так работать. Но если из за уникального Canvas fingerprint у вас проблемы, стоит выключить шумы и работать на профилях с такой же ОС как ваша настоящая и выбирать видеокарты с идентичной генерацией что и ваша настоящая видеокарта.
Рабочая цель — не «каждый запуск новый хеш». Рабочая цель — профиль, который выглядит цельно.
Нормальный Canvas/WebGL-профиль должен быть:
Кстати, крупные privacy-браузеры тоже не сводят защиту к «рандому на каждый пиксель». Brave описывает свой подход как randomization-защиту с seed на профиль и сайт, чтобы значения были стабильны там, где это нужно: Fingerprinting defenses 2.0. Это не антидетект-инструкция, а хороший пример инженерной логики: защита должна уменьшать связность, но не превращать браузер в набор случайностей.
В 0DETECT мы исходим из простой идеи: Canvas и WebGL нельзя рассматривать отдельно от всего профиля. Недостаточно «поменять хеш». Браузер должен выглядеть как реальная, цельная среда.
Это видно и в нашей документации по созданию профиля. Мы описываем профиль как “автоматически сформированную коллекцию отпечатков, собранных с реальных устройств”, а не как набор случайных значений: Создание профиля.

В общих настройках профиля мы задаём не только User-Agent и версию браузера. Там же находятся ОС, версия релиза, разрешение экрана, масштабирование, имя устройства, MAC-адрес, шрифты, язык, часовой пояс и геолокация. Часть этих параметров по умолчанию подбирается с учётом внешнего IP: например, язык, таймзона и координаты. Это важно: графический отпечаток не должен жить отдельно от географии, сети и платформы.
В блоке “Оборудование” мы отдельно показываем, что Canvas/WebGL связаны с аппаратной частью профиля: CPU cores, RAM, видеокарта, звуковая карта, WebGL, Canvas, Client Rects и медиа-устройства.

Видеокарту и её параметры мы эмулируем на основе реальных отпечатков устройств пользователей. WebGL получает аппаратный шум, имитирующий естественные реальные устройства. Canvas получает аппаратный шум в отрисовке, чтобы скрывать реальные графические характеристики устройства. Это лучше описывает задачу, чем фраза “просто сделать новый Canvas-хеш”.
Поэтому для нас важны три вещи.
Первая — согласованность. WebGL renderer, Canvas, шрифты, экран, ОС, User-Agent, язык и сеть должны складываться в одну историю. Если профиль выглядит как MacBook, он не должен отдавать сигналы, характерные для серверного Linux.
Вторая — стабильность. Один и тот же профиль не должен каждый раз превращаться в новое устройство. Для антифрод-системы резкая смена графического отпечатка внутри привычного аккаунта выглядит не как приватность, а как риск.
Третья — минимизация видимых следов подмены. Чем больше логики вынесено в JS-инъекции на странице, тем больше вероятность быть скопроментированным. Если ваш антидетект браузер делает подмены внутри кода, таким образом не остаётся следов в JavaScript-окружении.


