Cloudflare'in "Saldırı Modundayım" (IUAM), her ziyaretçiyi siteye erişmeden önce 5 saniyelik bir JavaScript sorgulamasına zorlayan bir DDoS savunmasıdır. Saldırılar sırasında site operatörleri tarafından manuel olarak tetiklenen veya yüksek riskli sitelerde kalıcı olarak etkinleştirilen en agresif Cloudflare koruma modudur. Otomatik erişim için IUAM, geleneksel HTTP istemcilerinin geçemeyeceği zorunlu bir JavaScript sorgulaması oluşturur.
IUAM ne yapar?
Bir site operatörü Cloudflare kontrol panelinde "Saldırı Modundayım" seçeneğini etkinleştirdiğinde:
Every request → Cloudflare edge
↓
JavaScript challenge page served (HTTP 503)
↓
Browser executes JavaScript challenge (~5 seconds)
↓
Challenge answer submitted automatically
↓
qa_session_cookie cookie set
↓
Original page loaded with qa_session_cookie cookie
IUAM meydan okuma sayfası
Sınama sayfası HTTP 503'ü döndürür ve şunları içerir:
| Öğe | Amaç |
|---|---|
jschl_vc |
Doğrulama koduna meydan okuyun |
pass |
Zamanlama jetonu (5 saniyelik beklemeyi zorunlu kılar) |
jschl_answer |
JavaScript tarafından hesaplanan yanıt |
cf_chl_opt |
Mücadele seçenekleri |
ray |
İstek için Cloudflare Ray ID |
| "Erişmeden önce tarayıcınız kontrol ediliyor..." | Kullanıcılara görünür mesaj |
Temel özellikler
- HTTP 503 durum kodu (403 DEĞİL)
- Meydan okumadan önce 5 saniyelik zorunlu bekleme
- JavaScript yürütmesi gerekiyor — düz HTTP istemcileri başarısız oluyor
- qa_session_cookie çerezi — ~30 dakika süreyle geçerlidir, sonraki isteklere izin verir
- Alan çapında — Alandaki her sayfa, zorluğu gösterir
IUAM ve diğer Cloudflare korumalarını belirleme
import requests
def identify_cloudflare_protection(url):
"""Distinguish IUAM from other Cloudflare protections."""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/120.0.0.0",
}
response = requests.get(url, headers=headers, timeout=15, allow_redirects=False)
html = response.text
status = response.status_code
if status == 503 and "jschl" in html:
return "IUAM (I'm Under Attack Mode)"
if status == 503 and "challenge-platform" in html:
return "Managed Challenge"
if status == 403 and "cf-ray" in str(response.headers):
return "Blocked by WAF/Bot Management"
if "cf-turnstile" in html:
return "Turnstile widget"
if "challenges.cloudflare.com" in html:
return "Cloudflare doğrulama akışı (generic)"
if status == 200:
return "No challenge (passed)"
return f"Unknown (status: {status})"
Algılama tablosu
| Sinyal | IUAM | Yönetilen Mücadele | Turnstile | WAF Bloğu |
|---|---|---|---|---|
| HTTP durumu | 503 | 503 | 200 | 403 |
jschl gövdede |
✅ | ❌ | ❌ | ❌ |
| 5 saniye bekleme | ✅ | Bazen | ❌ | ❌ |
qa_session_cookie seti |
Çözdükten sonra | Çözdükten sonra | ❌ | ❌ |
| Meydan okuma sayfası | Tam sayfa | Tam sayfa | Yalnızca widget | Hata sayfası |
| JS gerektirir | ✅ | ✅ | ✅ | ❌ |
JavaScript mücadelesi nasıl çalışır?
IUAM'ın JavaScript testi, ziyaretçinin gerçek bir tarayıcıya sahip olduğunu doğrulamak için tasarlanmıştır:
Mücadele akışı
- Cloudflare, karmaşık JavaScript içeren meydan okuma sayfası sunuyor
- JavaScript hesaplamaları gerçekleştirir: - Sayfadaki dizeler üzerinde matematiksel işlemler - DOM ölçümleri - Zamanlama uygulaması (minimum 4-5 saniye)
- Cevap hesaplanmıştır — zorluğa dayalı sayısal bir değer
jschl_vc,passvejschl_answerile Cloudflare'e otomatik olarak gönderilen form- Cloudflare yanıtı ve zamanlamayı doğrular
qa_session_cookieçerezi geri döndü — ~30 dakika süreyle erişime izin verir
HTTP istemcileri neden başarısız oluyor?
# This will ALWAYS get the challenge page:
import requests
response = requests.get("https://iuam-protected-site.com")
# response.status_code == 503
# response.text contains "Checking your browser..."
# Plain HTTP clients cannot:
# - Execute JavaScript
# - Compute the challenge answer
# - Meet the timing requirement
# - Generate the required cookies
IUAM'ı CaptchaAI ile çözme
Yöntem 1: Cloudflare doğrulama akışı çözücü (önerilir)
CaptchaAI'nin cloudflare_challenge yöntemi IUAM zorluklarını doğrudan ele alır:
import requests
import time
API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://iuam-protected-site.com/data"
# Step 1: Submit challenge to CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "cloudflare_challenge",
"sitekey": "managed",
"pageurl": TARGET_URL,
"json": 1,
})
task_id = submit.json()["request"]
print(f"Task submitted: {task_id}")
# Step 2: Poll for result
for attempt in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
token = result["request"]
print(f"Challenge solved! Token: {token[:50]}...")
break
elif result.get("request") == "ERROR_CAPTCHA_UNSOLVABLE":
print("Challenge could not be solved")
break
else:
print("Timed out waiting for solution")
# Step 3: Use qa_session_cookie cookie or token
# The response contains the clearance data needed to access the site
Yöntem 2: CaptchaAI ile tarayıcı otomasyonu
Kalıcı oturumlar için headless bir tarayıcıyı CaptchaAI ile birleştirin:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time
API_KEY = "YOUR_API_KEY"
# Launch browser
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=options)
# Navigate to IUAM page
driver.get("https://iuam-protected-site.com")
# Wait for challenge page to load
time.sleep(3)
# Check if IUAM challenge is present
if "Checking your browser" in driver.page_source or driver.title == "Just a moment...":
print("IUAM challenge detected")
# Option A: Wait for browser to solve natively (if not headless)
try:
WebDriverWait(driver, 15).until(
lambda d: "Checking your browser" not in d.page_source
)
print("Challenge passed natively")
except:
print("Native solve failed — using CaptchaAI")
# Submit to CaptchaAI for solving
# Token submission via JavaScript injection
# After challenge is passed, extract cookies for API use
cookies = driver.get_cookies()
qa_session_cookie = next(
(c["value"] for c in cookies if c["name"] == "qa_session_cookie"), None
)
if qa_session_cookie:
print(f"qa_session_cookie obtained: {qa_session_cookie[:30]}...")
# Use cookie with requests library
session = requests.Session()
for cookie in cookies:
session.cookies.set(cookie["name"], cookie["value"])
session.headers.update({
"User-Agent": driver.execute_script("return navigator.userAgent"),
})
# Now make requests with the clearance cookie
response = session.get("https://iuam-protected-site.com/api/data")
print(f"Status: {response.status_code}")
driver.quit()
Node.js
const axios = require("axios");
const API_KEY = "YOUR_API_KEY";
const TARGET_URL = "https://iuam-protected-site.com/data";
async function solveIUAM() {
// Submit challenge
const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
params: {
key: API_KEY,
method: "cloudflare_challenge",
sitekey: "managed",
pageurl: TARGET_URL,
json: 1,
},
});
const taskId = submit.data.request;
console.log(`Task submitted: ${taskId}`);
// Poll for result
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: API_KEY, action: "get", id: taskId, json: 1 },
});
if (result.data.status === 1) {
console.log("IUAM challenge solved!");
return result.data.request;
}
}
throw new Error("Timed out");
}
solveIUAM().then((token) => console.log("Token:", token.substring(0, 50)));
qa_session_cookie çerezlerini yönetme
qa_session_cookie çerezi, bir IUAM sorununu çözmenin temel çıktısıdır:
| Mülkiyet | Değer |
|---|---|
| Çerez adı | qa_session_cookie |
| ömür boyu | ~30 dakika (site tarafından yapılandırılabilir) |
| Kapsam | Alan çapında |
| Bağlı | IP adresi + Kullanıcı Aracısı |
| Yeniden kullanılabilir | Evet ömür boyu |
| Devredilebilir | Yalnızca aynı IP + UA ile |
Çerez yönetimi stratejisi
import requests
import time
class IUAMSessionManager:
"""Manage qa_session_cookie cookies for IUAM-protected sites."""
def __init__(self, api_key, target_url, user_agent=None):
self.api_key = api_key
self.target_url = target_url
self.user_agent = user_agent or (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/120.0.0.0"
)
self.session = requests.Session()
self.session.headers["User-Agent"] = self.user_agent
self.clearance_time = 0
self.clearance_lifetime = 1800 # 30 minutes default
def needs_refresh(self):
"""Check if clearance cookie needs refreshing."""
return time.time() - self.clearance_time > self.clearance_lifetime - 60
def solve_challenge(self):
"""Solve IUAM challenge and update session cookies."""
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": self.api_key,
"method": "cloudflare_challenge",
"sitekey": "managed",
"pageurl": self.target_url,
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": self.api_key,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
# Apply clearance to session
self.clearance_time = time.time()
return result["request"]
raise TimeoutError("IUAM solve timed out")
def get(self, url, **kwargs):
"""Make a GET request, solving IUAM if needed."""
if self.needs_refresh():
self.solve_challenge()
return self.session.get(url, **kwargs)
Sorun giderme
| Belirti | Sebep | Düzeltme |
|---|---|---|
| Mücadele sonsuz bir şekilde döngüye giriyor | İzin alındıktan sonra IP değişti | Çözüm + erişim için tutarlı IP kullanın |
| qa_session_cookie reddedildi | Kullanıcı-Aracı uyumsuzluğu | Çözüm ve istekler için aynı Kullanıcı Aracısını kullanın |
| 503 çözümden sonra da devam ediyor | Çerezin süresi doldu (>30 dakika) | Süresi dolmadan izni yenileyin |
| Mücadele sayfası beklenenden farklı | Site, IUAM'ı değil Yönetilen Mücadeleyi kullanıyor | Turnstile çözme yöntemine geç |
| Çoklu meydan okuma sayfaları | İlk zorluk IUAM, ikincisi Turnstile | Her ikisini de sırayla çözün |
Sık sorulan sorular
qa_session_cookie ne kadar sürer?
Varsayılan süre 30 dakikadır ancak site operatörleri bu süreyi 15 dakikadan 24 saate kadar yapılandırabilir. Çoğu site varsayılan 30 dakikalık süreyi kullanır. Süresi dolmadan önce yenilemeyi planlayın.
İstekler arasında qa_session_cookie'ı paylaşabilir miyim?
Evet, ancak yalnızca aynı IP adresinden ve aynı Kullanıcı Aracısı dizesiyle. Bunlardan herhangi birinin değiştirilmesi çerezi geçersiz kılacaktır.
Saldırı Modu Altında her zaman etkin mi?
Hayır. Site operatörleri saldırılar sırasında manuel olarak geçiş yapar. Bazı siteler ekstra bir güvenlik katmanı olarak onu kalıcı olarak etkin bırakır. Bir sitede IUAM'ın etkin olup olmayacağını tahmin etmenin bir yolu yoktur.
IUAM ile Yönetilen Mücadele arasındaki fark nedir?
IUAM her ziyaretçiye koşulsuz meydan okuyor. Yönetilen Mücadeleler, şüpheli trafiğe seçici olarak meydan okumak için Cloudflare'in bot değerlendirmesini kullanır. IUAM her zaman bir JS sorgulamasıyla 503 değerini döndürür. Yönetilen Mücadeleler bunun yerine Turnstile widget'ıyla 503'ü döndürebilir.
IUAM, API uç noktalarını etkiler mi?
Evet. IUAM, API uç noktaları da dahil olmak üzere alandaki her istek için geçerlidir. Tarayıcı olmayan istemcilerden gelen API isteklerinin başarısız olmasının nedeni budur; JavaScript sorgulamasını yürütemezler.
Özet
Cloudflare'in Saldırı Altında Modu, tüm ziyaretçiler için zorunlu bir JavaScript sorgulaması oluşturur ve 5 saniyelik bir hesaplama gereksinimiyle HTTP 503'ü döndürür. IUAM zorluklarını şu şekilde çözün:CaptchaAI'nin Cloudflare doğrulama akışı çözücüsü, ardından 30 dakikalık süre içinde sonraki istekler için qa_session_cookie çerezini kullanın. Çözüm ve kullanım arasında daima IP adresini ve Kullanıcı Aracısını eşleştirin.