Canvas и WebGL ломают отпечаток не шумом, а несогласованностью параметров
Разберем энтропию данного параметра: антифрод редко ищет «подмену» как факт, он ищет рассинхрон между источниками. Canvas может быть псевдослучайно зашумлен, но если шрифтовой стек, GPU-рендер и цветовой профиль не сходятся, отпечаток становится аномальным. Спуфинг через инъекцию JS-кода работает только тогда, когда модификация затрагивает весь путь генерации изображения, а не один метод toDataURL.
Для Canvas безопаснее не рисовать «рандом», а детерминировать результат на уровне контекста: один и тот же seed для sessionStorage, одинаковая геометрия, стабильные подмены только на вызовах getImageData/measureText/toBlob. Любая подмена должна сохранять статистику пикселей: распределение каналов, альфа-слой, субпиксельный антиалиасинг. Иначе CreepJS видит не маску, а артефакт патча.
Под капотом Chromium API WebGL сложнее: важны не только vendor/renderer, но и набор расширений, precision-format, limits, supported shaders. Если подменить только UNMASKED_RENDERER_WEBGL, а параметры MAX_TEXTURE_SIZE или ALIASED_LINE_WIDTH_RANGE оставить нативными, профиль распадается. Корректная эмуляция требует согласованного ответа на getParameter, getExtension и readPixels, плюс совпадения с TLS Client Hello и платформенным стеком.
Практика простая: сначала снимите нативный профиль, затем воспроизведите его без скачков между сессиями, без «случайных» значений и без конфликтов с аудиостеком и fonts API. Любая защита, которая не проходит корреляцию между Canvas и WebGL, детектируется не по одному признаку, а по совокупности мелких несоответствий.
Антидетект: эксперт
@antidetect_expert_arb
Canvas и WebGL ломают отпечаток не шумом, а несогласованностью параметров
Этот пост опубликован в Telegram-канале Антидетект: эксперт. Подписаться можно по ссылке: @antidetect_expert_arb.