Попробовать
Назад к блогу

Canvas fingerprint: что это, как проверить и как скрыть отпечаток

Canvas fingerprint: что это, как проверить и как скрыть отпечаток

Canvas fingerprint — это отпечаток браузера, который сайт получает через элемент HTML5 canvas: скрипт незаметно рисует текст и фигуры на невидимом холсте, считывает получившиеся пиксели и превращает их в короткий хеш. Видеокарта, драйверы, операционная система и движок шрифтов у каждого устройства отрисовывают картинку чуть по-своему, поэтому хеш у вашего компьютера постоянен и отличается от большинства других. Он работает как идентификатор без cookie и без каких-либо записей на устройстве.

Обычно объяснения на этом заканчиваются. Мы разберём больше: какие именно вызовы браузера использует скрипт отпечатка, как за минуту проверить свой canvas-хеш, что делают с canvas приватные браузеры и антидетект-профили и почему значение canvas должно сходиться с IP-адресом, часовым поясом и остальными параметрами профиля.

Прокси под ваш профиль

Резидентские прокси с выбором страны и города, чтобы IP, часовой пояс и язык совпадали с профилем браузера

Попробовать

Как получается canvas-отпечаток

Canvas задумывали для графиков, игр и редакторов изображений. В отпечатке его используют иначе — как измерительный прибор: насколько по-своему ваше железо и программы рисуют пиксели. Вся процедура занимает миллисекунды, а посетитель ничего не видит.

  1. Скрипт создаёт холст, который не добавлен на страницу, или крошечный скрытый холст.
  2. Пишет на нём тестовую строку из необычного набора символов — часто двумя шрифтами и цветами с полупрозрачностью — и добавляет кривые, градиенты или эмодзи.
  3. Считывает результат методами toDataURL() или getImageData(): первый отдаёт картинку в закодированном виде, второй — массив значений пикселей.
  4. Считает хеш и отправляет его на сервер, как правило вместе с десятками других признаков браузера.
Как получается canvas-отпечаток: от рисунка до хеша
Скрытый холст отрисовывается, пиксели считываются, хешируются и вместе с другими признаками дают один идентификатор

Почему одинаковый рисунок даёт разные пиксели

Два ноутбука выполняют одни и те же команды, а картинки всё равно получаются немного разными. Расхождения дают сглаживание краёв букв, субпиксельная отрисовка шрифтов, версии установленных шрифтов, смешивание цветов в видеочипе и округления в драйвере. Глазом этого не заметить, но в массиве пикселей меняются отдельные значения, а любое изменение даёт совсем другой хеш.

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

Canvas, WebGL и аудио вместе

Canvas входит в группу признаков отрисовки. WebGL сообщает производителя и модель видеокарты и так же может отрисовать 3D-сцену для хеша. Аудио-API обрабатывает тестовый сигнал и тоже хеширует результат. Вместе эти значения описывают устройство точнее, чем каждое по отдельности. Полная картина с сетевым уровнем, заголовками и поведением — в нашем разборе цифрового отпечатка браузера.

Кто и зачем снимает canvas-отпечаток

Canvas-хеши встречаются в двух совсем разных задачах.

  • Реклама и аналитика. Узнать вернувшегося посетителя, даже если он удалил или заблокировал cookie. В ЕС такое отслеживание, как и cookie, обычно требует согласия по правилам ePrivacy и GDPR.
  • Безопасность и антифрод. Банки, платёжные страницы, маркетплейсы и антибот-системы сравнивают устройство новой сессии с теми, что видели раньше. Вход со знакомым canvas-хешем вызывает меньше подозрений, чем с устройства, которое система видит впервые. Как эти сигналы складываются с репутацией IP и поведением, объясняет статья о том, как сайты распознают ботов.

Для второй группы необычное или противоречивое значение canvas не нейтрально. Хеш, который меняется при каждой загрузке страницы, или хеш, не совпадающий с заявленной видеокартой, сам по себе становится поводом присмотреться.

Как проверить свой canvas fingerprint

Хеш canvas и то, насколько он редкий, показывают бесплатные сервисы:

  • BrowserLeaks — отдельная страница canvas с отрисованной картинкой, хешем и долей посетителей с таким же значением.
  • AmIUnique — canvas в общей таблице признаков, у каждого видно, у какой доли посетителей такое же значение.
  • CreepJS — пытается определить, подменён ли вывод canvas; удобно, когда проверяете защищённый браузер.
  • Cover Your Tracks от EFF — оценивает общую уникальность браузера, включая canvas, и работу блокировки трекеров.
Тест Canvas Fingerprinting на BrowserLeaks: подпись canvas и уникальность 99,9%
BrowserLeaks показывает подпись canvas и её уникальность

Быстрая проверка в консоли

Чтобы увидеть механизм своими глазами, откройте консоль разработчика на любой странице и запустите короткий скрипт. Он рисует тестовую сцену, берёт SHA-256 от данных изображения и выводит первые символы.

async function canvasProbe() {
  const board = document.createElement("canvas");
  board.width = 240;
  board.height = 60;
  const pen = board.getContext("2d");
  pen.textBaseline = "top";
  pen.font = "16px Arial";
  pen.fillStyle = "#f60";
  pen.fillRect(100, 5, 80, 30);
  pen.fillStyle = "rgba(20, 90, 160, 0.7)";
  pen.fillText("Проба ÅßΩ 😊 0.1", 4, 12);
  const pixels = new TextEncoder().encode(board.toDataURL());
  const digest = await crypto.subtle.digest("SHA-256", pixels);
  return [...new Uint8Array(digest)].slice(0, 8)
    .map(b => b.toString(16).padStart(2, "0")).join("");
}
canvasProbe().then(id => console.log("canvas id:", id));

Запустите его дважды в одном браузере — результат должен совпасть. В другом браузере на том же компьютере или на другом компьютере он, скорее всего, будет иным. Если значение меняется при каждом запуске, браузер подмешивает шум в чтение canvas.

Что меняет canvas-хеш, а что нет

Многие ждут, что VPN или новый IP обнулят отслеживание. Но canvas вычисляется на самом устройстве, и сеть на него не влияет. В таблице — что на деле делает каждая распространённая мера.

МераЧто происходит с canvasПобочные эффекты
Очистка cookie, режим инкогнитоНичего, хеш пересчитывается тот жеНет
Прокси или VPNНичего, меняются только IP и видимое местоположениеМеняется сетевой уровень, а это важно для согласованности
Brave (защита по умолчанию)Вносит небольшие случайные изменения для каждого сайта и сессииСайт видит значение, которое меняется между сессиями
Защита от отпечатков в FirefoxСтрогий режим и приватные окна добавляют защиту canvas; старая настройка resistFingerprinting блокирует чтение или отдаёт пустую картинкуВ строгом режиме часть сайтов может работать с ошибками
Tor BrowserОтдаёт пустое изображение, пока вы не разрешите чтение canvas для сайтаУ всех один и тот же результат — так и задумано
Расширенная защита от отпечатков в SafariДобавляет шум при чтении canvasТолько Safari на устройствах Apple
Расширения-блокировщики canvasБлокируют или рандомизируют чтениеСамо расширение может выдавать себя
Профиль антидетект-браузераПостоянное подменное значение на профильРезультат зависит от согласованности всего профиля

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

Блокировка, шум или постоянная подмена

Технически подходов три. Блокировка возвращает пустоту или белую картинку: отслеживать нечего, но такое поведение редкое, а значит заметное. Шум вносит крошечные случайные изменения для каждого сайта или сессии: хеши на разных сайтах не совпадают, но детектор может заметить, что вывод «плавает». Постоянная подмена держит одно правдоподобное значение на профиль — к этому стремятся антидетект-браузеры: внутри профиля хеш стабилен, между профилями различается.

Три подхода к защите canvas
Блокировка, шум на каждую сессию и постоянное значение на профиль: три способа, которыми браузеры обходятся с чтением canvas

Canvas, IP и остальной профиль

Значение canvas никогда не оценивают в одиночку. Антифрод читает его рядом с моделью видеокарты из WebGL, операционной системой из User-Agent, размером экрана, шрифтами, часовым поясом, языком, а на стороне сервера — с IP-адресом. Внимание привлекают противоречия: canvas, типичный для Mac, при User-Agent от Windows, или профиль, настроенный на Париж, который выходит в сеть с адреса другой страны с другим временем.

Поэтому задача прокси, когда речь идёт об отпечатках, — не скрыть canvas, а сделать так, чтобы сетевой уровень рассказывал ту же историю, что и устройство. Если профиль настроен под конкретную страну и город, резидентские прокси из этой локации удерживают геолокацию IP, часовой пояс и язык в согласии с остальным отпечатком.

Согласованный профиль браузера с подходящим IP и локалью
Canvas, WebGL, часовой пояс, язык и местоположение IP должны описывать одно и то же устройство и место

Чек-лист для отдельных профилей

Командам, которые законно ведут несколько рабочих профилей, например агентству с клиентскими страницами, подойдёт такой порядок:

  1. Выберите одну стратегию canvas для профиля и не меняйте её: постоянное подменное значение, а не новый шум при каждом запуске.
  2. Сделайте производителя и модель видеокарты в WebGL правдоподобными для системы, которую заявляет профиль.
  3. Выставьте часовой пояс и язык под страну прокси.
  4. Дайте каждому профилю свой выделенный IP или свою sticky-сессию, а не общий адрес.
  5. После любой правки перепроверяйте профиль в BrowserLeaks и CreepJS.

Правила площадок при этом никто не отменял: отдельные профили помогают разводить действительно разные аккаунты, но не меняют того, что сервис разрешает. Инструкции по настройке популярных программ собраны в разделе о настройке прокси в антидетект-браузерах, а общие привычки защиты — в памятке по безопасности в интернете.

Частые ошибки

  • Случайный шум при каждой загрузке. Он мешает связать визиты на разных сайтах, но показывает, что браузер изменён. Для долгоживущих профилей постоянное значение обычно незаметнее.
  • Подмена canvas без WebGL. Пара значений противоречит друг другу и привлекает внимание.
  • Гора расширений. Каждый лишний блокировщик добавляет редкие признаки и может сделать отпечаток уникальнее, а не наоборот.
  • Забытый сетевой уровень. Идеально настроенный canvas не спасёт, если IP находится в другой стране, чем часовой пояс.

Частые вопросы о canvas fingerprint

Что такое canvas fingerprint простыми словами?

Сайт просит браузер нарисовать скрытую картинку, считывает пиксели и превращает их в короткий код. Каждое устройство рисует немного по-своему, поэтому по этому коду его можно узнать позже без cookie.

Меняет ли прокси или VPN canvas-отпечаток?

Нет. Canvas отрисовывается на вашем устройстве, а прокси или VPN меняют только IP-адрес и видимое местоположение. Они помогают согласовать сетевой уровень с остальным профилем, но хеш canvas остаётся прежним.

Законно ли снимать canvas-отпечаток?

Зависит от цели и страны. В ЕС отслеживание посетителей по отпечатку, как и по cookie, обычно требует согласия, а для защиты от мошенничества могут действовать другие правовые основания. Многие сайты упоминают это в политике конфиденциальности или cookie.

Защищает ли режим инкогнито от canvas fingerprinting?

Сам по себе нет. Приватное окно не сохраняет cookie и историю, но canvas вычисляется так же. Firefox и Safari добавляют в приватных окнах часть защиты от отпечатков, и значение может меняться или размываться.

Что лучше: рандомизировать canvas или блокировать?

У обоих вариантов есть минусы. Блокировка приватнее всего, но легко замечается; рандомизация не даёт связать сайты, но показывает, что значения плавают; постоянная подмена на профиль выглядит естественнее всего для долгоживущих аккаунтов.

Как антидетект-браузеры работают с canvas?

Они назначают каждому профилю собственное значение canvas и держат его неизменным между сессиями вместе с подходящими данными WebGL, шрифтов и экрана. Итог зависит от согласованности всего профиля, включая местоположение прокси.