JavaScript фінгерпринтинг та детектування ботів: як вебсайти вас ідентифікують
Ключові висновки
- JavaScript фінгерпринтинг збирає понад 50 характеристик браузера, щоб створити унікальний ідентифікатор, стійкіший за cookies та важче блокується.
- Ключові сигнали фінгерпринтингу включають Canvas, WebGL, AudioContext, шрифти, параметри екрана та дані Navigator API.
- Антибот-системи поєднують JS фінгерпринтинг з TLS фінгерпринтингом (JA3/JA4) та аналізом поведінки для надзвичайно точного виявлення ботів.
- Headless браузери (Puppeteer, Playwright) та інструменти автоматизації залишають видимі сліди які фінгерпринтинг розкриває, відсутні API, однакові результати, аномалії часу.
- Підробка фінгерпринтів можлива, але все складніше, антибот-системи використовують перевірки узгодженості які ловлять невідповідні підроблені значення.
Зміст
- Що таке JavaScript фінгерпринтинг?
- Як працює фінгерпринтинг браузера
- Ключові сигнали фінгерпринтингу
- TLS фінгерпринтинг (JA3/JA4)
- Як антибот-системи використовують фінгерпринтинг
- Виявлення headless браузерів
- Спуфінг відбитків та антидетекція
- Стратегії захисту для власників сайтів
- Імплікації приватності
Щоразу, коли ви відвідуєте сайт, ваш браузер мовчки розкриває десятки унікальних характеристик, розширення екрана, модель GPU, встановлені шрифти, особливості обробки звуку та точний спосіб, у який браузер відображає невидимі canvas-елементи. Разом ці сигнали створюють відбиток браузера який такий ж унікальний, як людський відбиток пальця.
Ця технологія працює в основі сучасних систем виявлення ботів, запобіганню шахрайству та захисту від автоматизації. Розуміння того, як це працює, критично важливо, чи то ви захищаєте свій сайт від ботів, чи намагаєтесь зрозуміти, чому певні системи безпеки кидають виклик вашому трафіку.
Що таке відбиток JavaScript?
Відбиток JavaScript це техніка, яка використовує браузерні JavaScript API для збору характеристик пристрою та оточення, створюючи унікальний ідентифікатор для кожної сесії браузера. На відміну від cookies (які користувачі можуть видалити) або IP-адрес (які змінюються), відбитки є:
- Стійкими: Залишаються навіть після очищення cookies, приватного перегляду та перезавантаження браузера
- Унікальними: Комбінація 50+ сигналів створює відбитки, унікальні серед мільйонів браузерів
- Пасивними: Збір відбувається невидимо без взаємодії користувача
- Важко спуфяться: Змінення одного сигналу часто створює помітні розбіжності з іншими
Як працює відбиток браузера
Скрипт відбитків зазвичай працює в три фази:
- Збір: JavaScript API запитують властивості браузера, об'єкт navigator, властивості екрана, canvas-рендеринг, WebGL можливості, AudioContext обробка та інше.
- Хешування: Зібрані значення об'єднуються та хешуються (зазвичай SHA-256 або MurmurHash3) у компактний рядок відбитка
- Порівняння: Хеш порівнюється з відомими відбитками, певно попередній відвідувач, відомий інструмент бота або спуфовану окремість
Ключові сигнали відбитків
Canvas-відбиток
Найпотужніший сигнал відбитків. Прихований елемент <canvas> малює текст, фігури та градієнти. Вихід піксель за пікселем варіюється залежно від GPU, версії драйвера, ядра рендеринга шрифтів та реалізації згладжування. Два різні пристрої майже ніколи не виробляють однаковий canvas-вихід.
WebGL-відбиток
WebGL розкриває інформацію про GPU (renderer, vendor) та виробляє унікальний рендерний вихід. Розширення WEBGL_debug_renderer_info розкриває точну модель GPU. Поєднане з WebGL тестами рендеринга, це створює сильний апаратний відбиток.
AudioContext-відбиток
Web Audio API обробляє звукові сигнали по-різному на кожному пристрої через різниці в апаратному та програмному забезпеченні. Генеруючи осцилятор і аналізуючи вихід, скрипти відбитків захоплюють унікальні характеристики обробки звуку.
Шрифт-відбиток
Різні версії ОС, мовні пакети та встановлені застосунки добавляють унікальні колекції шрифтів. Вимірюючи ширину та висоту рендерингу тексту в різних шрифтах, скрипти визначають, які шрифти встановлені, створюючи шрифт-базований відбиток.
Властивості Navigator та Screen
| Сигнал | Що він розкриває | Ентропія |
|---|---|---|
| navigator.userAgent | Версія браузера, ОС, тип пристрою | Середня (легко підробляється) |
| navigator.language | Мова, яка надається перевагу | Низька-середня |
| navigator.hardwareConcurrency | Кількість ядер процесора | Низька |
| navigator.deviceMemory | Обсяг оперативної пам'яті (приблизно) | Низька |
| screen.width/height | Роздільна здатність дисплея | Середня |
| screen.colorDepth | Можливість глибини кольору | Низька |
| navigator.platform | Рядок платформи ОС | Низька (застаріла) |
| navigator.maxTouchPoints | Можливість сенсорного екрана | Низька |
| Intl.DateTimeFormat().resolvedOptions().timeZone | Часовий пояс | Середня |
Додаткові сигнали високої цінності
- Витік WebRTC: Може розкрити локальні та публічні IP-адреси навіть через VPN
- Battery API: Рівень батареї та статус заряджання (застаріла в більшості браузерів через приватність)
- Стани дозволів: Чи надано або заборонено дозволи на повідомлення, геолокацію, камеру
- Client hints: User-Agent Client Hints від Chrome надають структуровані дані про пристрій
- CSS медіа-запити: Виявляють уподобання темного режиму, зменшеного руху, контрастності
TLS Fingerprinting (JA3/JA4)
TLS fingerprinting працює на рівні з'єднання, до того як запуститься будь-який JavaScript
JA3 Fingerprinting
Створений Salesforce, JA3 хешує компоненти повідомлення TLS Client Hello: версія SSL, шифри, розширення, еліптичні криві та формати EC point. Кожний HTTP-клієнт (Chrome, Firefox, Python requests, Go http, curl) генерує унікальний хеш JA3. Це ідентифікує реальне клієнтське програмне забезпечення навіть коли заголовки user-agent підроблені.
JA4 Fingerprinting
Новіший стандарт JA4 покращує JA3 завдяки більш читаному форматові та кращому відстеженню версій. Він створює рядок відбитка на кшталт "t13d1715h2_8daaf6152771_b0da82dd1658", який кодує версію TLS, кількість шифрів, кількість розширень та значення ALPN.
Як анти-бот системи використовують Fingerprinting
Сучасні анти-бот рішення такі як Cloudflare Bot Management, Akamai Bot Manager та DataDome поєднують fingerprinting з кількома рівнями виявлення:
- Перевірка TLS-відбитка: Перевіряє, що з'єднання походить від реального браузера, а не від HTTP-бібліотеки
- Виконання JavaScript: Запускає скрипти збору відбитків, боти що не можуть виконувати JS миттєво позначаються
- Перевірка консистентності: Перевіряє, що JS-відбиток відповідає TLS-відбиткові (наприклад, якщо JA3 вказує Chrome але canvas вказує headless, це позначається)
- Порівняння з відомими ботами: Порівнює відбиток зі базою даних відомих сигнатур бот-інструментів
- Поведінковий аналіз: Поєднує оцінку відбитка з рухами миші, часом кліків та паттернами прокручування
Виявлення безголових браузерів
Безголові браузери (Chrome headless, Puppeteer, Playwright) залишають явні ознаки:
- navigator.webdriver: Встановлено на
trueв автоматизованих браузерах (можна підробити але виявити через перевірку прототипів) - Відсутній об'єкт chrome:
window.chromeвідсутній або неповний у безголовому Chrome - Кількість плагінів: Реальний Chrome повідомляє про плагіни, безголовий Chrome зазвичай повідомляє нуль
- Невідповідність WebGL vendor: Безголові середовища часто повідомляють "Google Inc. (Google SwiftShader)" - програмний рендерер
- Дозвіл на сповіщення: Безголові браузери не можуть запитувати дозвіл на сповіщення, що розкриває їх через поведінку API
- Iframe contentWindow: Безголовий Chrome обробляє доступ до cross-origin iframe інакше
- Часові аномалії: Автоматизовані браузери виконують JavaScript з надлюдською швидкістю або з ідеально послідовним часом
Підробка Fingerprint та Anti-Detection
Кілька інструментів намагаються змінити браузерні відбитки:
| Інструмент | Підхід | Ризик виявлення |
|---|---|---|
| GoLogin | Кастомний Chromium з налаштовуваними профілями відбитків | Середній |
| Multilogin | Браузер, що імітує поведінку з глибокою персоналізацією відбитків | Середній |
| Puppeteer Extra (Stealth) | Плагін, що усуває виявлювані артефакти Puppeteer | Середньо-високий |
| undetected-chromedriver | Модифікований ChromeDriver, що обходить типові методи виявлення | Середньо-високий |
| Розширення для браузера | Блокування canvas, спуфінг WebGL | Високий (добавляє виявлювані артефакти) |
Стратегії захисту для власників сайтів
Якщо ви захищаєте свій сайт від ботів, впроваджуйте відбиток браузера як частину багаторівневого захисту:
- Використовуйте готове рішення: Cloudflare, Akamai або DataDome управляють відбитками в масштабі
- Комбінуйте з обмеженням частоти запитів: Відбиток браузера виявляє ботів, обмеження частоти запитів обмежує їхній вплив
- Додайте аналіз поведінки: Відбиток браузера + відстеження мишки + час натискання = комплексне виявлення
- Розгорніть на інфраструктурі, захищеній від DDoS: Відбиток браузера працює на рівні програми, вам також потрібен захист від DDoS на рівні мережі
- Регулярно оновлюйте виявлення: Інструменти ботів еволюціонують, ваше виявлення повинно еволюціонувати швидше
Проблеми приватності
Відбиток браузера викликає серйозні занепокоєння щодо приватності. Основні браузери все частіше обмежують можливості відбитків:
- Firefox: Пропонує режим стійкості до відбитків, який нормалізує canvas, WebGL та інші вихідні дані
- Safari: Обмежує читання canvas та обмежує перелік шрифтів
- Chrome: Зменшення інформації user-agent через Client Hints та Privacy Sandbox
- GDPR/Закони про приватність: Fingerprinting може розглядатися як збір персональних даних, що вимагає згоди в ЄС
Захистіть свій веб-сайт від атак ботів
Наша команда безпеки впроваджує комплексне виявлення ботів, fingerprinting, захист від DDoS та налаштування WAF для веб-сайтів та додатків під атаками.
Telegram: @unlednetwork → Напишіть нам у WhatsApp →
Коментарі
Маєте питання чи досвід? Приєднуйтесь. Ваш email не публікується.
We implemented this last month and already seeing positive signals.
Great question! This is something we see frequently with our clients. The key is consistency rather than a one-time fix.