اثر انگشت TLS
در همان اولین بستهٔ یک اتصال HTTPS (ClientHello) مرورگر شما مجموعههای رمز، افزونهها و منحنیهای بیضوی پشتیبانیشده را فهرست میکند. هش کردن این فیلدها JA3 / JA4 را میدهد؛ فریم SETTINGS که یک اتصال HTTP/2 را آغاز میکند هم به همین شکل قابل اثر انگشتگیری است. همهٔ اینها پیش از اجرای هر JavaScript اتفاق میافتد و تغییر UA آن را عوض نمیکند.
- JA4
- هش JA3
- رشتهٔ JA3
- اثر انگشت HTTP/2
- نسخهٔ TLS
- منبع
- مشاهدهشده در
- مرورگر طبق تجزیهٔ سرور
- دفعات مشاهده در اینجا
- اولین مشاهده
- مشاهدات این JA4
- سهم از همان خانوادهٔ مرورگر
- مرورگرهای دارای این JA4
JA3 (Salesforce، ۲۰۱۷) نسخهٔ TLS، مجموعههای رمز، افزونهها، منحنیها و قالبهای نقطه را به ترتیب اصلی به هم میچسباند و MD5 میگیرد — هر چیزی را جابهجا کنید، هش تغییر میکند. از Chrome 110 به بعد ترتیب افزونهها در هر اتصال به هم میریزد، بنابراین JA3 یک Chrome تقریباً هر بار فرق دارد. JA4 (FoxIO، ۲۰۲۳) پیش از هش کردن (SHA-256 کوتاهشده) مرتبسازی میکند و نسخهٔ TLS، SNI، ALPN و شمارشها را در یک پیشوند خوانا مثل t13d1516h2 میگذارد، که آن را برای هر خانوادهٔ مرورگر بسیار پایدار میکند: همهٔ مرورگرهای Chromium (Chrome، Edge، Brave…) یک JA4 مشترک دارند، Firefox و Safari هر کدام JA4 خودشان را. وبسایتها JA4 را با UA مقایسه میکنند — UAیی که ادعای Firefox دارد اما دستدهیاش شبیه Chrome است، یک ابزار خودکارسازی یا مرورگر ضدشناسایی با UA عوضشده است؛ این سایت همین مقایسه را با آمار JA4 ↔ خانوادهٔ مرورگر خودش انجام میدهد. برای دیدن اثر انگشت، سرور باید خودش TLS را خاتمه دهد: روی یک نام میزبان پشت پروکسی Cloudflare (ابر نارنجی) دستدهی در لبهٔ Cloudflare انجام میشود و سرور اصلی فقط اثر انگشت خود Cloudflare را میبیند (Cloudflare فقط به مشتریان Enterprise دسترسی JA4 میدهد). به همین دلیل fingerproxy روی یک نام میزبان جداگانهٔ فقط-DNS (ابر خاکستری) اجرا میشود که مرورگر یک بار بهصورت cross-origin آن را فراخوانی میکند؛ وقتی آن نقطهٔ پایانی در دسترس نباشد به سرویس شخص ثالث check.ja3.zone برمیگردیم که فقط JA3 میدهد.