PerimeterX Tespidi Neden Bu Kadar Zor?
PerimeterX — 2022'de HUMAN Security olarak yeniden markalaştı — bot tespit alanında en davranışsal-sinyal-ağır (behavioral-signal-heavy) çözümlerden biri. Basit başlık eşleştirmesi veya IP bloklarıyla çalışmaz; bunun yerine cihaz parmak izi, TLS özellikleri, IP itibarı ve insan-benzeri davranış kalıplarını aynı anda değerlendirir. Sonuç olarak, PerimeterX korumalı sitelerde çalışan scrapers'lar genellikle 403 veya CAPTCHA sayfalarıyla karşılaşır.
Bu makale, PerimeterX'in tespit mimarisini JA3/JA4 ve canvas fingerprinting gibi somut sinyal düzeyinde açıklıyor. Ardından, meşru otomasyon — TOS dahilinde scraping, güvenlik araştırması, yetkili pentesting — için temiz residential proxy + tarayıcı gizlilik (stealth) stratejileri sunuyor.
PerimeterX JS Challenge Akışı: _px3 ve _pxhd
PerimeterX'in temel koruma akışı iki ana çerez üzerinden yürür:
_px3: İlk ziyarette PerimeterX JS sensörü tarafından ayarlanan çerez. Cihaz parmak izi verilerini ve temel bir risk skorunu içerir. GenellikleHttpOnlyveSecurebayraklarına sahiptir._pxhd: HUMAN'ın daha yeni “Human Challenge” akışında kullanılan çerez._px3'ün yerini alarak daha karmaşık bir challenge-response döngüsü içerir.
Akış Adımları
- İlk istek: Tarayıcı siteye erişir; PerimeterX JS sensörü (
...px-cdn alanından) yüklenir. - Sensör toplama: JS, 50+ sinyal toplar — canvas, WebGL, ekran metrikleri, timezone, dil, eklentiler, fare hareketi, klavye zamanlaması, scroll davranışı.
- Çerez yerleştirme: Toplanan veriler HUMAN sunucularına gönderilir; sunucu bir risk skoru hesaplar ve
_px3veya_pxhdçerezini ayarlar. - Sonraki istekler: Her sayfa isteğinde bu çerez sunucuya gönderilir; PerimeterX edge modülü skoru doğrular. Düşük skor = geçiş, yüksek skor = CAPTCHA veya 403.
- Challenge: Eğer risk skoru eşik değerini aşırsa, kullanıcıya bir interaktif CAPTCHA (slider, görüntü tanıma) gösterilir. Başarılı çözüm sonrası çerez yenilenir.
Açık kaynak araçlarıyla çerezleri çalmak yetmez — PerimeterX çerez değerlerini sensör verileriyle bağdaştırır. Sahte bir çerezle yapılan istek, sensör doğrulaması başarısız olursa reddedilir.
Detection Sinyalleri: Derinlemesine Analiz
1. Cihaz Parmak İzi (Device Fingerprinting)
PerimeterX'in JS sensörü, tarayıcıdan geniş bir veri seti toplar:
- Canvas fingerprint: Gizli bir
<canvas>öğesine metin ve şekiller çizer,toDataURL()çıktısının hash'ini alır. Farklı GPU'lar, sürücüler ve font rendering motorları farklı hash'ler üretir. Headless Chrome'un yazılım renderlayıcısı (SwiftShader) belirgin bir sinyaldir. - WebGL parametreleri:
WEBGL_debug_renderer_infoüzerinden GPU satıcı ve renderer dizelerini okur. Mesa/llvmpipe veya SwiftShader = headless tarayıcı şüphesi. - Ekran metrikleri:
screen.width,screen.height,screen.colorDepth,window.devicePixelRatio. Headless modda bu değerler tutarsız veya eksik olabilir (örneğin,screen.width=0veyacolorDepth=0). - Font enumeration:
document.fontsAPI veya offsetWidth ölçümüyle yüklü fontları tespit eder. Sunucu ortamında nadiren yüklü olan fontlar = bot sinyali. - AudioContext fingerprint:
OfflineAudioContextile oluşturulan ses sinyalinin hash'i. Farklı donanım ve yazılım ses işlemcileri farklı sonuçlar üretir.
2. TLS Parmak İzi: JA3 ve JA4
PerimeterX, TLS el sıkışmasından JA3/JA4 parmak izini hesaplar. Bu, HTTP isteği ulaşmadan önce oluşur — JS bypass edemezsiniz.
- JA3: ClientHello mesajındaki TLS sürümü, cipher suite'leri, uzantılar, eliptik eğri grupları ve nokta biçimlerinden oluşturulan MD5 hash.
- JA4: JA3'ün geliştirilmiş hali; cipher suite sıralamasını ve uzantı sırasını daha iyi yakalar. Örneğin, Python
requestskütüphanesinin JA3'ü Chrome'dan belirgin şekilde farklıdır.
Somut örnek: Chrome 120'nin JA4'ü t13d1515h2_... (A) formatında, Python urllib3'ün JA4'ü t13d1515h2_... (B) — cipher sıralaması ve uzantı seti farklı. PerimeterX bu farklılığı tespit eder.
3. IP İtibarı (IP Reputation)
PerimeterX, IP'yi birden fazla boyutta değerlendirir:
- ASN ve hosting sağlayıcı: Datacenter IP'ler (AWS, Hetzner, DigitalOcean) otomatik yüksek risk puanı alır.
- Geçmiş davranış: Aynı IP'den gelen önceki bot aktiviteleri, HUMAN'ın küresel ağından paylaşılır.
- Coğrafi tutarlılık: IP'nin coğrafi konumu ile tarayıcının timezone/dil ayarları uyuşmuyorsa şüphe artar.
4. Davranışsal Sinyaller (Behavioral Signals)
PerimeterX'i DataDome ve Akamai'den ayıran en önemli özellik budur. PerimeterX, fare hareketi, tıklama zamanlaması, scroll deseni ve klavye ritmi gibi davranışsal verileri ağırlıklı olarak kullanır:
- Mouse movement entropy: İnsan fare hareketi düzgün eğriler (Bézier) ile karakterize edilir; bot hareketleri doğrusal veya rastgele noktalar arası sıçramalar şeklindedir.
- Event timing:
mousedown→mouseuparası süre,keydown→keyuparası süre. Botlar genellikle sıfır veya sabit gecikme üretir. - Scroll patterns: İnsan scroll'u düzensiz hızlarda ve duraklamalarla olur; bot scroll'u sabit hızda veya hiç yoktur.
- Touch events: Mobil cihazlarda dokunma basıncı ve hareket hızının gerçekçi olup olmadığı kontrol edilir.
PerimeterX vs DataDome vs Akamai: Karşılaştırma
| Özellik | PerimeterX (HUMAN) | DataDome | Akamai Bot Manager |
|---|---|---|---|
| Ana odak | Davranışsal sinyaller + cihaz parmak izi | İstek düzeyinde ML + cihaz parmak izi | Sensör verisi şifreleme + TLS fingerprinting |
| JA3/JA4 kullanımı | Yüksek — erken filtreleme | Orta — çerez doğrulama öncelikli | Çok yüksek — Akamai fingerprint'in temel taşı |
| Davranışsal ağırlık | Çok yüksek — mouse/keyboard/touch | Düşük-orta | Orta — sensör paketi içinde |
| Çerez mimarisi | _px3 / _pxhd | datadome | ak_bmsc |
| Challenge türü | Slider CAPTCHA, görüntü tanıma | CAPTCHA, JS challenge | Sensör challenge, interaktif |
| API koruması | Orta — ağırlıklı olarak web | Yüksek — API ve web | Çok yüksek — API, mobil, web |
PerimeterX'in davranışsal ağırlığı, sadece IP değiştirmenin yeterli olmadığı anlamına gelir. Bir residential proxy + gerçekçi tarayıcı davranışı kombinasyonu gereklidir.
Meşru Bypass Stratejisi: Residential Proxy + Playwright Stealth
Adım 1: Residential Proxy ile Temiz IP
Datacenter IP'ler PerimeterX'de yüksek risk puanı alır. Residential proxy'ler, gerçek ISP'lerden gelen IP'ler sağlar ve coğrafi tutarlılık sağlar.
# ProxyHat residential proxy — curl ile temel kullanım
curl -x http://user-country-US:PASSWORD@gate.proxyhat.com:8080 \
"https://www.example.com/"
# Şehir düzeyinde hedefleme (uçak bileti scraping için kritik)
curl -x http://user-country-US-city-chicago:PASSWORD@gate.proxyhat.com:8080 \
"https://www.united.com/"
# SOCKS5 ile TLS fingerprint tutarlılığı için
# (SOCKS5, bazı durumlarda daha iyi TLS el sıkışması sağlar)
curl -x socks5://user-country-US:PASSWORD@gate.proxyhat.com:1080 \
"https://www.example.com/"
Adım 2: Playwright + Stealth Plugin Kurulumu
Saf Playwright, PerimeterX tarafından tespit edilebilir. playwright-extra ve stealth plugin ile temel fingerprint sinyallerini temizleyin:
import asyncio
from playwright_stealth import stealth_async
from playwright.async_api import async_playwright
PROXY_URL = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080"
async def scrape_with_stealth():
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False, # PerimeterX headless tespit eder
proxy={"server": PROXY_URL}
)
context = await browser.new_context(
viewport={"width": 1920, "height": 1080},
locale="en-US",
timezone_id="America/Chicago",
user_agent=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/125.0.0.0 Safari/537.36"
),
)
page = await context.new_page()
await stealth_async(page) # Stealth patch'leri uygula
# İlk sayfa yükle — PerimeterX JS sensörü çalışır
await page.goto("https://www.example.com/", wait_until="networkidle")
# _px3 veya _pxhd çerezini kontrol et
cookies = await context.cookies()
px_cookies = [c for c in cookies if c["name"] in ("_px3", "_pxhd")]
print(f"PerimeterX çerezleri: {px_cookies}")
await browser.close()
asyncio.run(scrape_with_stealth())
Adım 3: Gerçekçi Davranış Simülasyonu
PerimeterX'in davranışsal motorunu geçmek için fare hareketi ve tıklama zamanlaması gerçekçi olmalıdır. Aşağıdaki yardımcı fonksiyonlar Bézier eğrileri ve doğal gecikmeler kullanır:
import random
import asyncio
from playwright.async_api import Page
async def human_delay(min_ms=50, max_ms=200):
"""İnsan-benzeri rastgele gecikme."""
await asyncio.sleep(random.uniform(min_ms, max_ms) / 1000)
async def human_mouse_move(page: Page, target_x: int, target_y: int):
"""Bézier eğrisi ile gerçekçi fare hareketi."""
current = await page.evaluate("""() => ({
x: window._mouseX || 0,
y: window._mouseY || 0
})""")
# Kontrol noktaları ile doğal eğri
cp1x = current["x"] + (target_x - current["x"]) * random.uniform(0.2, 0.5)
cp1y = current["y"] + (target_y - current["y"]) * random.uniform(0.1, 0.4)
cp2x = current["x"] + (target_x - current["x"]) * random.uniform(0.5, 0.8)
cp2y = current["y"] + (target_y - current["y"]) * random.uniform(0.6, 0.9)
steps = random.randint(15, 30)
for i in range(steps + 1):
t = i / steps
# Kübik Bézier interpolasyonu
x = ((1-t)**3 * current["x"]
+ 3*(1-t)**2*t * cp1x
+ 3*(1-t)*t**2 * cp2x
+ t**3 * target_x)
y = ((1-t)**3 * current["y"]
+ 3*(1-t)**2*t * cp1y
+ 3*(1-t)*t**2 * cp2y
+ t**3 * target_y)
await page.mouse.move(x, y)
await asyncio.sleep(random.uniform(5, 15) / 1000)
async def human_click(page: Page, selector: str):
"""Gerçekçi tıklama: hareket + mousedown gecikmesi + mouseup."""
box = await page.locator(selector).bounding_box()
if not box:
raise ValueError(f"Element bulunamadı: {selector}")
target_x = box["x"] + box["width"] * random.uniform(0.3, 0.7)
target_y = box["y"] + box["height"] * random.uniform(0.3, 0.7)
await human_mouse_move(page, target_x, target_y)
await human_delay(30, 100) # mousedown öncesi gecikme
await page.mouse.down()
await human_delay(50, 150) # mousedown → mouseup arası
await page.mouse.up()
await human_delay(100, 300) # tıklama sonrası gecikme
Adım 4: TLS Fingerprint Uyumu
JA3/JA4 tespitini geçmek için tarayıcının TLS el sıkışması gerçek bir tarayıcıya benzemelidir. En güvenli yaklaşım:
- Gerçek Chromium kullanın — Playwright'ın Chromium'ı, cipher sıralaması ve uzantı seti açısından Chrome ile neredeyse aynıdır. Python
requestsveyahttpxkullanmayın. - Headless modda çalıştırmayın —
--headless=newbile bazı fingerprint farklılıkları yaratır.headless=False+ Xvfb kullanın. - Cypress veya Puppeteer-extra kullanmayın — bu araçlar belirgin JA3 sinyalleri taşır.
Adım 5: Hız Sınırlama ve Pacing
PerimeterX, istek hızını ve deseni de izler. Dakikada yüzlerce istek = anında engelleme. Meşru scraping için:
- İstekler arası 3-8 saniye rastgele gecikme ekleyin.
- Günlük limit belirleyin — hedef site'nin organik trafiğinin %1'ini aşmayın.
- Oturum başına 50-100 sayfa ile oturumu yenileyin (yeni çerezler + yeni IP).
- IP rotasyonu: ProxyHat'ta sticky session kullanın, her oturum için yeni IP alın.
# Sticky session ile oturum bazlı IP rotasyonu
# Her oturum için benzersiz bir session ID kullanın
import uuid
session_id = str(uuid.uuid4())[:8]
PROXY_URL = f"http://user-session-{session_id}-country-US:PASSWORD@gate.proxyhat.com:8080"
# Her 80 sayfada bir yeni oturum başlat
# (yeni session_id = yeni IP = yeni çerez seti)
PerimeterX Kullanan Siteler
PerimeterX (HUMAN Security) yaygın olarak şu sektörlerde kullanılır:
- Havayolları: United Airlines, American Airlines, Delta — uçak bileti fiyat scraping'ine karşı koruma.
- Lüks e-ticaret: Neiman Marcus, Saks Fifth Avenue — stok ve fiyat izleme botlarına karşı.
- Bilet satış: Bazı büyük etkinlik platformları — otomatik satın alma botlarına karşı.
- Otomotiv: Bazı araç listeleme siteleri — stok scraping'ine karşı.
Bu sitelerde scraping yaparken, sitenin Hizmet Şartları'nı (ToS) mutlaka kontrol edin. Birçok havayolu, robots.txt ile scraping'i açıkça yasaklar.
Etik Çerçeve: Meşru Scraping Nedir?
Bu makale, yetkili güvenlik araştırması, TOS-dahili veri toplama ve meşru otomasyon için yazılmıştır. PerimeterX bypass tekniklerinin kötüye kullanımı (bilgisayar dolandırıcılığı, ToS ihlali, rekabete aykırı veri hırsızlığı) etik ve yasal olarak kabul edilemez.
Meşru scraping kriterleri:
- robots.txt'e uyun — eğer bir yol yasaklanmışsa, o yolu scraplemeyin.
- ToS'u okuyun — açıkça yasaklanmışsa, izinsiz scraping hukuki risk taşır.
- Rate limiting uygulayın — sitenin altyapısına zarar verecek hızda istek göndermeyin.
- GDPR ve CCPA'ya uyun — kişisel verileri izinsiz toplamayın.
- Yazılı onay — pentesting için hedef kurumdan yazılı onay alın.
Daha fazla bilgi için web scraping kullanım senaryoları sayfamıza göz atın.
PerimeterX'e Karşı Yaygın Hatalar
Hata 1: Sadece IP Rotasyonu Yeterli Sanmak
PerimeterX davranışsal sinyallere en çok ağırlık veren çözümdür. 100.000 farklı residential IP ile bile, gerçekçi olmayan fare hareketi ve tıklama zamanlaması = tespit. IP + fingerprint + davranış üçlüsünü birlikte yönetmelisiniz.
Hata 2: Headless Chrome Kullanmak
navigator.webdriver = true, Chrome.Headless user-agent, eksik Notification permission, sıfır ekran metrikleri — bunların hepsi PerimeterX'in tespit listesinde. Headless modda çalışmayın veya en azından Xvfb ile gerçek görüntü ortamı oluşturun.
Hata 3: Python requests ile HTTP İstekleri
Python requests kütüphanesinin JA3 parmak izi, hiçbir gerçek tarayıcıya benzemez. PerimeterX, TLS el sıkışması aşamasında bunu tespit eder ve istek HTTP katmanına ulaşmadan engellenir. Her zaman gerçek bir tarayıcı kullanın.
Hata 4: Çerezleri Yeniden Kullanmak
Bir oturumun _px3 çerezini başka bir IP ile kullanmak, PerimeterX'in IP-çerez bağını ihlal eder. Çerez ve IP aynı oturumda kalmalıdır.
Gelişmiş Stratejiler
Session Isolation
Her scraping oturumu için yeni bir tarayıcı context + yeni residential IP + yeni çerez seti kullanın. ProxyHat'ın sticky session özelliği ile bir oturum boyunca aynı IP'yi koruyabilir, ardından yeni oturumda yeni IP'ye geçebilirsiniz:
# Oturum izolasyonu
sessions = []
for i in range(10):
sid = f"scrape-{i}-{uuid.uuid4().hex[:6]}"
proxy = f"http://user-session-{sid}-country-US:PASSWORD@gate.proxyhat.com:8080"
# Her oturum: yeni browser context + yeni proxy + yeni çerez seti
# 80 sayfa sonra oturumu kapat, yenisini başlat
Fingerprint Tutarlılığı
Her oturumda tutarlı bir fingerprint profili kullanın:
- Aynı
userAgent,viewport,locale,timezone - Aynı IP coğrafi konumu ile eşleşen timezone ve dil
- Aynı ekran çözünürlüğü ve renk derinliği
- Tutarlı WebGL vendor/renderer bilgileri
Tutarsızlık = tespit. Örneğin, ABD IP'si + Alman timezone + Çin dili = anında blok.
Canvas ve WebGL Noise
Stealth plugin'ler canvas fingerprint'ine noise ekler, ancak bu noise tutarlı olmalıdır. Her sayfa yenilemede farklı noise = şüpheli. playwright-stealth veya puppeteer-extra-plugin-stealth kullanın ve noise değerlerini oturum boyunca sabit tutun.
Key Takeaways
- PerimeterX (HUMAN Security) davranışsal sinyallere en çok ağırlık veren bot tespit çözümüdür — fare hareketi, tıklama zamanlaması ve scroll deseni kritik sinyallerdir.
- _px3 ve _pxhd çerezleri, sensör verileriyle bağlantılıdır — çerez hırsızlığı tek başına işe yaramaz.
- JA3/JA4 TLS fingerprinting, HTTP isteği ulaşmadan tespit yapar — Python requests kullanmayın, gerçek Chromium kullanın.
- Residential proxy + gerçekçi fingerprint + davranışsal simülasyon üçlüsü gereklidir; herhangi biri eksik = tespit.
- IP-fingerprint-coğrafi tutarlılık şarttır — ABD IP'si ile Alman timezone kullanmayın.
- Hız sınırlama ve oturum izolasyonu uygulayın — dakikada yüzlerce istek = anında blok.
- Etik çerçeveye uyun — TOS, robots.txt, GDPR ve CCPA'yı dikkate alın.
ProxyHat'ın residential proxy ağı, PerimeterX korumalı sitelerde meşru scraping için temiz ISP IP'leri sağlar. Fiyatlandırma sayfamıza göz atın veya konum listemizi inceleyin. Daha fazla scraping tekniği için web scraping en iyi pratikler makalemizi okuyun.






