PerimeterX (HUMAN Security) Tespit Mekanizmaları ve Meşru Bypass Stratejileri

PerimeterX'in _px3/_pxhd çerez akışından JA3/JA4 parmak izine, davranışsal analitikten canvas fingerprinting'e kadar tespit mimarisini derinlemesine inceleyin. Meşru otomasyon için residential proxy + Playwright stealth rehberi.

PerimeterX (HUMAN Security) Tespit Mekanizmaları ve Meşru Bypass Stratejileri

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. Genellikle HttpOnly ve Secure bayrakları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ı

  1. İlk istek: Tarayıcı siteye erişir; PerimeterX JS sensörü (...px-cdn alanından) yüklenir.
  2. Sensör toplama: JS, 50+ sinyal toplar — canvas, WebGL, ekran metrikleri, timezone, dil, eklentiler, fare hareketi, klavye zamanlaması, scroll davranışı.
  3. Çerez yerleştirme: Toplanan veriler HUMAN sunucularına gönderilir; sunucu bir risk skoru hesaplar ve _px3 veya _pxhd çerezini ayarlar.
  4. 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.
  5. 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=0 veya colorDepth=0).
  • Font enumeration: document.fonts API veya offsetWidth ölçümüyle yüklü fontları tespit eder. Sunucu ortamında nadiren yüklü olan fontlar = bot sinyali.
  • AudioContext fingerprint: OfflineAudioContext ile 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 requests kü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: mousedownmouseup arası süre, keydownkeyup arası 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

ÖzellikPerimeterX (HUMAN)DataDomeAkamai Bot Manager
Ana odakDavranışsal sinyaller + cihaz parmak iziİstek düzeyinde ML + cihaz parmak iziSensör verisi şifreleme + TLS fingerprinting
JA3/JA4 kullanımıYüksek — erken filtrelemeOrta — çerez doğrulama öncelikliÇok yüksek — Akamai fingerprint'in temel taşı
Davranışsal ağırlıkÇok yüksek — mouse/keyboard/touchDüşük-ortaOrta — sensör paketi içinde
Çerez mimarisi_px3 / _pxhddatadomeak_bmsc
Challenge türüSlider CAPTCHA, görüntü tanımaCAPTCHA, JS challengeSensör challenge, interaktif
API korumasıOrta — ağırlıklı olarak webYü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 requests veya httpx kullanmayın.
  • Headless modda çalıştırmayın--headless=new bile 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.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön