TLS-отпечаток (JA3)
Сигнатура, выведенная из того, как клиент согласует TLS-рукопожатие, используемая для идентификации ПО, делающего запрос - часто через хеш JA3.
TLS-отпечаток идентифицирует ПО за соединением по конкретному способу, которым оно согласует TLS- (HTTPS-) рукопожатие. Список наборов шифров, расширений и параметров, которые предлагает клиент, характерен для используемой библиотеки или браузера. JA3 - популярный метод, хеширующий эти значения в короткую сигнатуру, представляющую клиента.
Это мощный инструмент обнаружения ботов, потому что работает ниже прикладного уровня. Можно выставить идеальный браузерный user-agent и чистые заголовки, но если ваша HTTP-библиотека согласует TLS иначе, чем реальный Chrome, JA3-отпечаток вас выдаёт. У реальных Chrome, Firefox и Safari - узнаваемые TLS-отпечатки; у Python requests и Go net/http - свои, очевидно не браузерные.
Антибот-системы держат базы известных «хороших» браузерных отпечатков и известных «плохих» отпечатков автоматизации. Запрос, чей TLS-отпечаток не совпадает с заявленным user-agent - заголовок Chrome, не-Chrome рукопожатие, - помечается как поддельный, часто ещё до того, как сайт вернёт контент.
Победа над TLS-фингерпринтингом требует инструментов, имитирующих рукопожатие реального браузера, - curl-impersonate, специализированных TLS-библиотек или полноценных браузеров. В сочетании с резидентными прокси и совпадающими заголовками браузер-точный TLS-отпечаток часто и есть то, что отделяет скраперы, которые проходят, от тех, что блокируются.
Хеш того, как ваш клиент здоровается
Любое TLS-соединение начинается с Client Hello, и это сообщение несёт куда больше, чем имя хоста. В нём перечислены поддерживаемые шифронаборы, предлагаемые расширения, известные эллиптические кривые и принимаемые форматы, причём в определённом порядке. Порядок задаёт библиотека, а не пользователь.
JA3 берёт эти поля, склеивает и хеширует. На выходе короткая строка, опознающая не человека, а программу. Chrome под Windows даёт одно значение, Firefox другое, Python requests третье, Go четвёртое. Два человека на одной сборке Chrome дают одинаковый JA3, и в этом суть: опознаётся софт.
Для защищающейся стороны это почти бесплатно. Не нужен ни JavaScript, ни куки, ни ожидание: хеш доступен с первого пакета, ещё до разбора вашего запроса. Отсюда столько мгновенных блокировок клиента, который ничего не успел сделать.
JA4 это более новая версия той же идеи, устойчивее к перетасовке и подробнее. Практический вывод не меняется: ваша http-библиотека объявляет, что она такое, раньше, чем говорит, чего хочет.
Что здесь может прокси, а чего не может
Наши прокси переносят трафик. Они не переписывают ваше TLS-рукопожатие, и честный провайдер не станет обещать обратное:
Откуда берётся отпечаток
requests / httpx / aiohttp -> отпечаток Python, распознаётся влёт
Go net/http -> отпечаток Go
curl -> отпечаток curl
curl-impersonate -> имитирует сборку настоящего браузера
Playwright / Puppeteer -> настоящий браузер, настоящий отпечаток
антидетект-браузеры -> браузер плюс изоляция профилей- Если сайт блокирует мгновенно с резидентского адреса, а браузер с того же адреса работает, дело было не в адресе.
- Для скрапинга защищённых целей запускайте настоящий браузер или библиотеку имитации. Смена User-Agent у Python-клиента с рукопожатием ничего не делает.
- Отпечатки следуют за версиями браузеров. Библиотека имитации, застрявшая на старой сборке Chrome, становится заметной, когда та исчезает из обихода.
- Для работы с аккаунтами берите антидетект: он даёт настоящее рукопожатие плюс разделение кук и хранилища, чего прокси не даст.
Чего JA3 сайту не говорит
Он не опознаёт вас
Отпечаток Chrome общий у миллионов. Именно поэтому необычный бросается в глаза.
Он не чинится прокси
Рукопожатие делает ваш клиент, и через нас оно проходит без изменений.
Он не обходится ротацией адресов
Один и тот же отпечаток с сотни адресов выглядит как один инструмент с сотней адресов, что хуже одного адреса.
Совпасть с браузером мало
Порядок заголовков, настройки HTTP/2 и поведение должны согласовываться с рукопожатием, иначе противоречие просто переехало слоем выше.
Смотри на практике
Готов использовать tls-отпечаток (ja3)?
SotaProxy даёт доступ к ротирующим резидентским, мобильным, дата-центр и ISP прокси. Без минимальных платежей.
Начать