Вернуться в блог

Canvas-фингерпринтинг и защита: согласованность лучше рандомизации

Canvas-фингерпринтинг превращает различия в отрисовке одинаковых команд на разном оборудовании и ПО в идентификатор и редко используется отдельно. Разумная защита — не менять значения при каждом посещении, а сохранять согласованность характеристик внутри среды.

Принцип Canvas-фингерпринтинга несложен, но многие распространённые способы защиты работают прямо противоположно тому, что действительно полезно.

Одинаковые команды дают разные результаты на разных устройствах

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

Процесс примерно такой: страница сначала рисует графику и текст, а затем с помощью toDataURL() экспортирует результат в строку Base64. Эту строку можно использовать как идентификатор. На разных устройствах результат экспорта отличается, поэтому во многих случаях значение получается уникальным. Удаление cookie на него не влияет, как и очистка кэша.

Его редко используют отдельно

Один Canvas-отпечаток имеет ограниченную ценность и может меняться после обновления браузера или графического драйвера. На практике Canvas обычно объединяют с другими характеристиками и сверяют их между собой:

  • Графические данные: WebGL, список шрифтов, модель видеокарты
  • Данные среды: UA, часовой пояс, язык, разрешение экрана
  • Данные сессии: cookie, локальное хранилище, сетевой выход

Такие признаки объединяют ради проверки согласованности. Каждый показатель по отдельности может выглядеть нормально, но противоречия становятся заметны в совокупности: часовой пояс выставлен на США, список языков содержит только китайский, а Canvas соответствует встроенной графике, хотя UA заявляет новый дорогой аппарат. Платформе не нужно доказывать, кто вы. Достаточно определить, что этот набор характеристик не похож на реальную машину.

Отключение делает среду заметнее

Первая мысль многих — полностью отключить Canvas, но результат может оказаться прямо противоположным.

Почти все браузеры обычных пользователей поддерживают Canvas. Среда, которая явно его не поддерживает, статистически относится к меньшинству и тем самым показывает, что к ней применены специальные настройки. Есть и более практичная проблема: многие сайты используют Canvas для обрезки изображений, графиков и отображения CAPTCHA. После отключения функции сайта могут ломаться, добавляя ещё одну аномалию.

Другой подход — выдавать новый случайный набор значений при каждом посещении. У него та же проблема: отпечатки реальных устройств стабильны. Среда, которая каждый раз меняется, ведёт себя не как обычное устройство, поэтому её проще выделить и пометить. Сама рандомизация может быть распознаваемым сигналом.

Разумное направление — внутренняя согласованность

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

На практике признаки должны подтверждать друг друга: часовой пояс, язык и географическое расположение выходного IP должны логично сочетаться. Устройство, заявленное в UA, и графические возможности, которые показывают Canvas и WebGL, должны относиться к сопоставимому уровню. Среда одного и того же аккаунта должна оставаться стабильной длительное время и не меняться заметно при повторных посещениях. Не стоит полагаться на расширения, которые просто отключают отдельную функцию: они часто создают ещё более заметные признаки. По возможности запускайте меньше сторонних скриптов, чтобы сократить поверхность для сбора данных.

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

Итог

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