Библиотека ThumbmarkJS создаёт цифровой отпечаток браузера и не даёт обойти баны и скидки.
Каждый раз, когда пользователь чистит куки или открывает приватное окно, он как будто надевает маску - и ваш сайт его больше не узнаёт. Для обычного блога это не страшно. Но если у вас интернет-магазин, онлайн-сервис или что-то, где крутятся деньги, - это уже проблема. Мошенники давно знают этот трюк: удалил куки, зарегистрировался заново, получил скидку для новичков. Или накрутил голоса. Или обошёл бан. ThumbmarkJS - бесплатная библиотека с открытым кодом, которая закрывает эту дыру без платных подписок и без хранения чего-либо на компьютере пользователя.
Как браузер становится паспортом - без единого файла на диске
Идея проста, хотя реализация за ней нетривиальная. Каждый браузер - это уникальная комбинация сотен параметров: какие шрифты установлены в системе, как видеокарта рисует определённые фигуры, какие плагины активны, какой часовой пояс, какое разрешение экрана, как браузер обрабатывает звук. ThumbmarkJS собирает всё это в один момент и превращает в короткую строку - хэш, цифровой отпечаток.
Никакой файл при этом не создаётся и не сохраняется на устройстве пользователя. Отпечаток вычисляется на лету, каждый раз при загрузке страницы - и если браузер не менялся, результат будет тем же. Именно поэтому приватный режим здесь почти не помогает: он прячет историю и куки, но не меняет видеокарту и не переставляет шрифты.
Написана библиотека на TypeScript - это такой расширенный JavaScript, который проверяет ошибки ещё до запуска кода. Для конечного пользователя это означает, что библиотека ведёт себя предсказуемо и её проще поддерживать в рабочем состоянии.
ThumbmarkJS на практике: 80% уникальности и один неприятный нюанс
Разработчики честно указывают: бесплатная версия даёт около 80% уникальности. Это значит, что примерно каждый пятый пользователь теоретически может получить такой же отпечаток, как кто-то другой. Особенно это касается владельцев Mac с Safari - там браузеры намеренно унифицированы, чтобы затруднить слежку, и отпечатки действительно сливаются.
Восемьдесят процентов - это не идеал. Но это уже несравнимо лучше, чем ноль, который вы получаете после очистки куки. Для большинства задач - аналитика уникальных посетителей, базовая защита от накрутки, выявление подозрительно активных аккаунтов - этого достаточно. Библиотека позволяет настраивать, какие именно параметры браузера учитывать: можно убрать медленные проверки ради скорости или добавить свои собственные метрики поверх стандартных.
Есть и платная версия с серверными компонентами - она поднимает точность до 99% и добавляет определение ботов, анонимных сетей и трафика из дата-центров. Но это уже отдельный разговор и отдельный бюджет.
Миллиард отпечатков в месяц - и никто не слышал названия
Вот деталь, которая меня удивила. В описании проекта авторы спокойно сообщают, что библиотека генерирует больше миллиарда отпечатков ежемесячно. Миллиард. При этом проект молодой - первые версии появились в конце 2023 года, и страница проекта на GitHub насчитывает около 80 ответвлений. Это говорит о том, что библиотеку активно используют в продакшне, но не особо афишируют - что для инструментов безопасности, в общем-то, нормально.
Ещё один момент, о котором стоит знать заранее: по умолчанию библиотека отправляет небольшую долю логов разработчикам - примерно одну сотую процента от всех запросов. Делается это для улучшения точности. Функцию можно отключить одной настройкой, но о её существовании лучше знать до интеграции, а не после.
Что это такое с точки зрения этики - и почему вопрос не такой простой
Здесь начинается спорная территория. Принято считать, что слежка через куки - это плохо, а отпечаток браузера - ещё хуже, потому что его нельзя удалить. Но есть и другая сторона: куки читаются и передаются автоматически с каждым запросом, их можно украсть, они занимают место и требуют согласия пользователя по европейским законам. Отпечаток не хранится на устройстве вообще - он вычисляется заново каждый раз на основе данных, которые браузер и так отдаёт любому сайту.
По сути, fingerprinting - это более этичная замена кукам, потому что он не оставляет следов на компьютере пользователя. Многие с этим не согласятся, и понять их можно: ощущение слежки от этого никуда не девается. Но с технической точки зрения аргумент небезоснователен.
Для разработчика важно другое: ThumbmarkJS не требует показывать баннер с согласием на куки, не создаёт файлов, не передаёт персональных данных - только анонимный хэш. Как вы его используете дальше - уже ваша ответственность.
Сравнение с платными решениями: когда бесплатное реально работает
Рынок коммерческих инструментов для идентификации браузеров существует, и цены там начинаются от нескольких тысяч рублей в месяц за минимальный тариф - а для серьёзных нагрузок счёт идёт на десятки тысяч. ThumbmarkJS в бесплатной версии не требует ничего, кроме времени разработчика на интеграцию.
Подключается библиотека двумя способами. Первый - быстрый тест прямо в браузере: достаточно добавить одну строку на страницу, указав адрес на сервисе jsDelivr, который раздаёт готовые библиотеки. Второй - полноценная интеграция в проект через стандартный менеджер пакетов npm, которым пользуется любой JavaScript-разработчик. После этого в коде вызывается одна функция, которая возвращает строку-отпечаток. Дальше вы сами решаете, что с ней делать: сохранить в базу, сравнить с предыдущим визитом, передать на сервер вместе с дополнительными данными.
Размер библиотеки - несколько десятков килобайт. Для сравнения: одна фотография на смартфоне весит в десять раз больше.
Если ваш сайт уже теряет деньги на мошенниках или накрутчиках, а бюджет на безопасность стремится к нулю - ThumbmarkJS закрывает большую часть задач без единого рубля затрат. Вопрос только в том, есть ли у вас разработчик, который потратит пару часов на интеграцию. А если нет - стоит ли вообще запускать сервис, где крутятся деньги, без технического специалиста в команде?
Источник: ThumbmarkJS