Web kazıma (web-scraping) için Playwright kullanan geliştiriciler, script tam bir Chromium örneği başlatmasına, gerçek bir User-Agent ayarlamasına ve insan benzeri gecikmeler eklemesine rağmen ilk isteklerinin reddedildiğini görüyorlar. Sunucu, TLS fingerprinting (TLS parmak izi) adı verilen bir teknikle isteği TLS el sıkışması (handshake) sırasında engelliyor.
TLS fingerprinting açıklaması
Bir tarayıcı bir HTTPS bağlantısı açtığında bir ClientHello mesajı gönderir. Paket; TLS sürümünü, desteklenen şifreleme paketlerini (cipher suites), bir dizi uzantıyı (eliptik eğriler, imza algoritmaları) ve diğer birkaç alanı listeler. Bu tam kombinasyon, ağ yığınını (networking stack) benzersiz bir şekilde tanımlar.
Araştırmacılar bu ham alanları JA3 (veya onun daha yeni kuzeni JA4) adı verilen kompakt bir tanımlayıcıya dönüştürmek için hash'ler. Gerçek bir Chrome tarayıcısı bir hash üretirken, bir Python HTTP kütüphanesi başka bir hash üretir. Sunucunun hash değeri beyan edilen User-Agent ile eşleşmezse, isteği bir script (otomasyon) olarak işaretler.
Standart bir Playwright tarayıcısı neden hâlâ işaretlenebilir?
Playwright'ın varsayılan Chromium sürümü genellikle doğru Chrome parmak izini verir, ancak birçok scraper tutarlılığı bozan adımlar ekler:
- Karma istek stratejileri – Geliştiriciler genellikle Playwright'ın ağır sayfaları işlemesine izin verirken, hafif bir HTTP istemcisinin yardımcı kaynakları (JSON, görseller vb.) çekmesine izin verirler. Bu hızlı çağrılar Chrome'un değil, kütüphanenin parmak izini taşır ve sunucu bu uyumsuzluğu anında fark eder.
- TLS sonlandıran (terminating) proxy'ler – Bazı proxy servisleri TLS akışını çözer, trafiği inceler veya değiştirir, ardından tekrar şifreler. Sunucu nihayetinde proxy'nin parmak izini görür ve bunu bir tarayıcı olmayan istemci olarak engelleyebilir.
- Diğer protokol katmanları – Anti-scraping sistemleri ayrıca HTTP/2 ayarlarını, başlık (header) sırasını ve IP itibarını karşılaştırır. Herhangi bir katmandaki tutarsızlık bir engellemeye neden olabilir.
JA3'ten JA4'e: silahlanma yarışı
JA3, yaygın olarak benimsenen ilk TLS parmak iziydi. Chrome artık her başlatmada uzantılarının sırasını rastgele değiştiriyor, bu da gerçek bir tarayıcı için JA3 hash'ini kararsız hale getiriyor. JA4, hash'lemeden önce uzantı listesini sıralayarak bu sorunu çözer ve Chrome sırayı karıştırdığında bile kararlı bir tanımlayıcı sağlar. JA4'ü benimseyen tespit araçları, gerçek Chrome örneklerini yalnızca statik bir JA3 hash'ini kopyalayan script istemcilerinden güvenilir bir şekilde ayırabilir.
Geliştiriciler bugün neler yapabilir?
Bir sunucuyu sonsuza dek kandıracak bir "sihirli dize" (magic string) yoktur. Güvenilir yaklaşım, isteğin her katmanının aynı hikayeyi anlatmasını sağlamaktır:
- User-Agent, TLS el sıkışması, HTTP/2 ayarları ve başlık sırasını aynı tarayıcı sürümü ve işletim sistemiyle uyumlu hale getirin.
- Tam bir tarayıcı otomasyon aracını ayrı bir HTTP istemcisiyle karıştırmayı bırakın. Hız önemliyse, basit olanlar da dahil olmak üzere tüm ağ çağrılarını Playwright'ın yönetmesine izin verin.
- Bağlantıyı sonlandırmadan TLS'yi doğrudan ileten (pass through) proxy'ler seçin veya orijinal TLS el sıkışmasını değiştirmeden iletecek şekilde yapılandırın.
- IP itibar servislerini izleyin; temiz bir IP havuzu, geçmişteki kötüye kullanımlara dayalı engellenme olasılığını azaltır.
Parmak izi tutarlılığını görmezden gelmenin maliyeti
Bir scraper el sıkışma aşamasında engellendiğinde, sayfa mantığına asla ulaşamaz; bu nedenle veri toplanmaz ve JavaScript yürütmek için zaman harcanmaz. Büyük ölçekli veri toplamaya güvenen işletmeler, yeniden deneme döngüleri başladıkça bulut bilişim maliyetlerinin arttığını görürler. Tekrarlanan engellemeler, aynı ağdan gelen diğer meşru trafiği de etkileyen IP yasaklarına yol açabilir.
Karşı görüş: Siteler neden TLS fingerprinting kullanıyor?
Site sahipleri TLS fingerprinting'i meşru bir savunma olarak görür. Otomatik web kazıma, sunucuları aşırı yükleyebilir, ödeme duvarlarını (paywalls) aşabilir veya büyük ölçekte kişisel verileri toplayabilir. Bir site, TLS parmak izinin beyan edilen tarayıcıyla eşleşip eşleşmediğini kontrol ederek, gerçek kullanıcılara zarar vermeden düşük çabalı botların büyük bir kısmını filtreler. Bu teknik, CAPTCHA'lardan daha az müdahalecidir ve kullanıcı deneyimini korur.
Bundan sonra ne takip edilmeli?
- JA4'ün benimsenmesi – Önümüzdeki aylarda daha fazla güvenlik satıcısının ve CDN sağlayıcısının JA4 tabanlı tespiti devreye almasını bekleyin.
- Tarayıcı düzeyinde rastgeleleştirme – Chrome ve diğer tarayıcılar TLS parametrelerini çeşitlendirmeye devam edebilir; bu da parmak izi araçlarını trafik zamanlaması veya JavaScript yürütme modelleri gibi daha karmaşık sinyallere doğru itebilir.
- Proxy piyasasının tepkisi – Web kazıma topluluğunun değişmemiş el sıkışma ihtiyacına hitap eden, "TLS-transparent" (TLS şeffaf) yönlendirme vaat eden servislerin ortaya çıkması muhtemeldir.
Özet
Eğer Playwright scraper'ınız herhangi bir sayfa yüklenmeden reddediliyorsa, bunun sebebi neredeyse kesinlikle TLS parmak izindeki (fingerprint) bir uyumsuzluktur. Çözüm hızlı bir yama değildir; her protokol katmanının beyan edilen tarayıcı profiliyle disiplinli bir şekilde uyumlu hale getirilmesini gerektirir. User-Agent, TLS el sıkışması (handshake), HTTP/2 ayarları, başlık sırası ve proxy davranışı arasındaki tutarlılık, modern anti-scraping savunmalarının radarına yakalanmadan kalmanın tek güvenilir yoludur.
