Cloudflare Tespit Nasıl Çalışıyor
Cloudflare, tüm web sitelerinin% 20'sini korumak için en yaygın kullanılan anti-bot servisidir. Otomatik trafiği tespit etmenin, meşru kazı araçları inşa eden herkes için nasıl gerekli olduğunu anlamak. Cloudflare çok katmanlı bir algılama hattı kullanır:
- IP itibarı skoru: Cloudflare küresel bir tehdit istihbarat veritabanını koruyor. Datacenter IPs, bilinen VPN aralıkları ve daha önce bayraklı adresler daha yüksek risk puanları alır.
- TLS parmak izi: Cloudflare analizleri TLS MüşteriHello mesajları Bağlantılı müşteri iddia edilen kimliğini karşılaştırır.
- Tarayıcı parmak izi: JavaScript zorlukları prob tuval, WebGL, navigator özellikleriVe diğer sinyallerin düzinelerce.
- JavaScript zorluklar: Cloudflare gerçek bir tarayıcı ortamında doğru bir şekilde yürütmesi gereken JavaScript'e hizmet eder.
- Davranış analizi: Zamanlaması, navigasyon kalıpları, fare hareketleri ve etkileşim sinyalleri analiz edilir.
- Makine öğrenme modelleri: Tüm sinyaller sürekli yeni otomasyon kalıplarına adapte olan ML modellerine beslenir.
Daha geniş bir bakış için, bizi gör Anti-bot algılama sistemleri için kapsamlı kılavuz.
Cloudflare Protection Tiers
| Katman | Analiz Yöntemleri | Zorluk Düzeyi | Tipik Siteler |
|---|---|---|---|
| Temel (Free) | IP itibarı, temel JS meydan okuma | Low Low Low Low | Küçük bloglar, kişisel siteler |
| Pro Pro Pro Pro Pro | + WAF kuralları, oranı sınırlamak | Medium Medium Medium Medium Medium | Orta işletmeler, SaaS |
| Business Business Business | + Gelişmiş Bot Yönetimi | Yüksek Yüksek Yüksek Yüksek Yüksek | E-ticaret, işletme siteleri |
| Enterprise Enterprise Enterprise Enterprise | + ML-güçlü bot skoru, davranışsal analiz | Çok yüksek | Büyük perakendeciler, finansal hizmetler |
Bulutu Korumak için Etik Çerçeve
Herhangi bir teknik yaklaşımı uygulamadan önce, açık etik sınırlar oluşturun:
- API'leri ilk önce kontrol edin: Birçok Cloudflare-protected siteleri veri erişimi için resmi API'ler sunar. Her zaman bunları tercih edin.
- Saygı robotlar.txt: Site açıkça belirli yolları yıkırsa, bu yönergeleri onurlandırın.
- Hizmet koşulları: Sitenin otomatik erişimle ilgili izin verdiğini anlayın.
- Sadece genel verilere erişim: Kimlik doğrulamayı veya özel verilere erişmeyi asla denemeyin.
- Sunucu etkisi: Makul istek oranları kullanın ve hedef sunucuyu aşırı yüklemeyin.
- Veri lisansını düşünün: Ticari kullanım koşulları için, veri lisans anlaşmalarını keşfedin.
Bu kılavuzdaki teknikler, mevcut verilere yasal erişim için tasarlanmıştır. Güvenlik korumalarını yetkisiz erişim, credential hırsızlığı veya inkâr-hizmet saldırıları için asla kullanmamalıdır.
Strateji 1: Temiz IP ile Konut Artıları
En etkili ilk adım IP adreslerinizin temiz üne sahip olmasını sağlamaktır. Cloudflare'nin IP skoru ağır penalizes veri merkezi ve VPN IPs.
# Python: Using residential proxies for Cloudflare-protected sites
from curl_cffi import requests as curl_requests
response = curl_requests.get(
"https://cloudflare-protected-site.com",
impersonate="chrome",
proxies={
"http": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080",
"https": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
},
timeout=30
)
if response.status_code == 200:
print("Access granted")
elif response.status_code == 403:
print("Blocked — may need additional measures")
elif response.status_code == 503:
print("Cloudflare challenge page — need browser execution")
ProxyHat'ın konut temsilcileri Cloudflare'nin veritabanında gerçek konut adresleri olarak sınıflandırılmış, IP itibarı katmanını atlatmak. Görmemize bakın Konut temsilcilerinin karşılaştırması vs VPNs VPN IP'lerin Bulutflare'ye karşı neden başarısız olduğu için.
Strateji 2: Browser-Grade TLS Parmakları
Cloudflare checks JA3/JA4 TLS parmak izi Bağlantı müşterisini tanımlamak için. Python's requests Kütüphane, Go's net/http, ve Node.js'in varsayılan müşterileri, Bulutflare bayrakları olmayan TL’leri üretiyor.
| Müşteri | Cloudflare Sonuç | Neden Neden Neden Neden Neden? |
|---|---|---|
| Python istekleri | Bloked veya meydan okuma | OpenSSL TLS parmak izi olmayandır |
| curl cffi (im personate="kro") | Genellikle sık sık sık geçer geçiş | Mimics Chrome BoringSSL parmak izi |
| Headless Chrome (Puppeteer/Playwright) | Genellikle sık sık sık geçer geçiş | Real BoringSSL TLS çöp |
| Go net /http | Bloked veya meydan okuma | Go kripto/tls parmak izi ayırt edicidir |
| Go with uTLS (Chrome merhaba) | Genellikle sık sık sık geçer geçiş | Mimics Chrome parmak izi |
Strateji 3: JavaScript Challenges
Cloudflare'nin JavaScript sorunları çözmek için gerçek bir tarayıcı ortamı gerektirir. İki yaklaşım var:
Yaklaşım A: Headless Browser
// Node.js: Playwright with stealth for Cloudflare challenges
const { chromium } = require('playwright');
async function accessCloudflare(url) {
const browser = await chromium.launch({
proxy: {
server: 'http://gate.proxyhat.com:8080',
username: 'USERNAME',
password: 'PASSWORD'
}
});
const context = await browser.newContext({
locale: 'en-US',
timezoneId: 'America/New_York',
viewport: { width: 1920, height: 1080 }
});
const page = await context.newPage();
// Navigate and wait for Cloudflare challenge to resolve
await page.goto(url, { waitUntil: 'networkidle', timeout: 60000 });
// Cloudflare challenges typically redirect after completion
// Wait for the actual content to load
await page.waitForSelector('body', { timeout: 30000 });
// Check if we passed the challenge
const title = await page.title();
if (title.includes('Just a moment') || title.includes('Attention Required')) {
// Challenge not yet resolved — wait longer
await page.waitForNavigation({ waitUntil: 'networkidle', timeout: 30000 });
}
const content = await page.content();
await browser.close();
return content;
}
Yaklaşım B: Cookie Ekstraksiyon ve Reuse
Bir kafasız tarayıcıda bir kez meydan okumayı çözün, kurabiyeleri çıkarın (özellikle de özellikle cf_clearance), sonra onları hafif bir HTTP istemcisinde yeniden kullanın:
// Node.js: Extract Cloudflare cookies for reuse
const { chromium } = require('playwright');
async function extractCfCookies(url) {
const browser = await chromium.launch({
proxy: {
server: 'http://gate.proxyhat.com:8080',
username: 'USERNAME-session-cf1',
password: 'PASSWORD'
}
});
const context = await browser.newContext({
locale: 'en-US',
timezoneId: 'America/New_York',
});
const page = await context.newPage();
await page.goto(url, { waitUntil: 'networkidle', timeout: 60000 });
// Wait for challenge resolution
await page.waitForTimeout(10000);
// Extract cookies
const cookies = await context.cookies();
const cfClearance = cookies.find(c => c.name === 'cf_clearance');
const userAgent = await page.evaluate(() => navigator.userAgent);
await browser.close();
return { cookies, userAgent, cfClearance };
}
// Reuse cookies with got-scraping (same proxy session!)
import { gotScraping } from 'got-scraping';
const { cookies, userAgent } = await extractCfCookies('https://example.com');
const cookieString = cookies.map(c => `${c.name}=${c.value}`).join('; ');
const response = await gotScraping({
url: 'https://example.com/api/data',
proxyUrl: 'http://USERNAME-session-cf1:PASSWORD@gate.proxyhat.com:8080',
headers: {
'Cookie': cookieString,
'User-Agent': userAgent, // Must match the browser that solved the challenge
}
});
Önemli: The The The The The The The The cf_clearance kurabiye IP adresine ve meydan okumayı çözen kullanıcıya bağlıdır. Aynı proxy seansını (sticky IP) ve aynı kullanıcı tarafından tekrarlarken kullanmalısınız.
Strateji 4: Desen Optimizasyonu İste
Cloudflare'nin davranışsal analizi, insan olmayan istek kalıpları değildir. Bu kalıpları meşru erişim için takip edin:
Realistic Navigation Flow Flow
# Python: Realistic navigation pattern
from curl_cffi import requests as curl_requests
import time
import random
session = curl_requests.Session(impersonate="chrome")
session.proxies = {
"http": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080",
"https": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
}
# Step 1: Visit homepage first
home = session.get("https://example.com")
time.sleep(random.uniform(2.0, 4.0))
# Step 2: Navigate to category (with Referer)
category = session.get(
"https://example.com/products",
headers={"Referer": "https://example.com"}
)
time.sleep(random.uniform(1.5, 3.5))
# Step 3: Browse items (with proper Referer chain)
for item_url in item_urls[:20]:
item = session.get(
item_url,
headers={"Referer": "https://example.com/products"}
)
time.sleep(random.uniform(1.0, 3.0))
Limiting Kılavuzları
| Bulutlar | Güvenli İstek Oranı | İstekler Arasında Gecikme |
|---|---|---|
| Temel / Ücretsiz | 20-30 req /min | 2-3 saniye |
| Pro Pro Pro Pro Pro | 10-20 req /min | 3-6 saniye |
| Business Business Business | 5-10 req /min | 6-12 saniye |
| Enterprise Enterprise Enterprise Enterprise | 2-5 req /min | 12-30 saniye |
Strateji 5: Common Cloudflare Responses
| Durum Kodu | Anlam | Eylem |
|---|---|---|
| 200 200 | Başarı Başarı Başarı | Parse content normalde |
| 403 | İzinsiz - IP veya parmak izi bloke | Yeni bir IP'ye Rotate, TLS parmak izi kontrol edin |
| 429 | Oran sınırlı | Üstel olarak, istek oranını azaltır |
| 503 | JavaScript meydan okuma | Çözülmek için kafasız tarayıcı kullanın |
| 520-527 | Cloudflare server hataları | gecikmeden sonra yeniden deneme - kökenli sunucu sorunu |
# Python: Response handling with retry logic
import time
import random
def cloudflare_resilient_request(session, url, max_retries=3):
for attempt in range(max_retries):
try:
response = session.get(url, timeout=30)
if response.status_code == 200:
return response
if response.status_code == 403:
# IP flagged — rotate session
print(f"403 on attempt {attempt + 1} — rotating IP")
session = create_new_session()
time.sleep(random.uniform(5, 10))
continue
if response.status_code == 429:
# Rate limited — exponential backoff
wait = (2 ** attempt) * 5 + random.uniform(0, 5)
print(f"429 — waiting {wait:.1f}s")
time.sleep(wait)
continue
if response.status_code == 503:
# JS challenge — need headless browser
print("503 — JavaScript challenge detected")
return None # Escalate to browser-based approach
except Exception as e:
print(f"Error: {e}")
time.sleep(random.uniform(2, 5))
return None
Complete Multi-Layer Approach
En güvenilir strateji tüm katmanları birleştirir:
- Konut temsilcileri: ProxyHat konut IPs Temiz IP itibarı için.
- Browser-grad TLS:
curl_cffiDoğru parmak izleri için ya da kafasız tarayıcı. - Consistent Titles: Tamam başlığı iddia edilen tarayıcıyı eşleştirir.
- Doğal zamanlama: İnsan tarama modellerini takip eden rastgele gecikmeler.
- Çerez yönetimi: Oturumlar boyunca kurabiyeyi kabul edin ve koruyun.
- Refer zincirleri: Proper navigasyon sayfaları hedef almak için ana sayfadan akış.
Kapsamlı algılama stratejileri için, bizi gör Tam anti-deteksiyon rehberiprogramlama dilleri arasında proxy entegrasyonu için rehberlerimizi görün Python Python, HayırVe Go Go Go Go.
Ne zaman avlanmak için
Taktığın durumları doğru yaklaşım değildir:
- Sitenin kamu API'si var: Her zaman mevcut olduğunda resmi API'leri kullanın.
- Veriler doğrulamanın arkasındadır: Giriş korumalı verilere kazı yoluyla erişim genellikle bir ToS ihlalidir.
- Site açıkça kazıyı yasaklamaktadır: ToS'de açık yasaklara saygı gösterin.
- Data license is available: Ticari kullanım için, satın alma veri lisansları genellikle daha güvenilir ve yasaldır.
- İçerik telif hakkı verilir: Yeniden dağıtma için telif hakkı içeriği yasal endişeler yaratır.
Refer'e ProxyHat'ın belgeleri Sorumlu kullanım yönergeleri ve hizmet koşulları için.






