Cloudflare cung cấp hai biện pháp bảo vệ riêng biệt mà các nhà phát triển thường kết hợp: Kiểm tra tính toàn vẹn của trình duyệt (BIC) và thử thách CAPTCHA. BIC là một kiểm tra cấp tiêu đề, thụ động, chặn lưu lượng truy cập không phải của trình duyệt mà không gặp bất kỳ thách thức nào — nó chỉ trả về 403. Các thử thách CAPTCHA (Turnstile, thử thách JavaScript, Thử thách được quản lý) đưa ra một nhiệm vụ có thể giải quyết được mà các trình duyệt hợp pháp có thể vượt qua. Sự khác biệt rất quan trọng vì mỗi loại yêu cầu một chiến lược xử lý khác nhau.
Họ so sánh như thế nào
| tính năng | Kiểm tra tính toàn vẹn của trình duyệt | Thử thách CAPTCHA |
|---|---|---|
| Nó kiểm tra những gì | Chỉ tiêu đề HTTP | Hành vi trình duyệt + môi trường |
| Yêu cầu phải có JavaScript? | Không (cấp tiêu đề) | Có |
| Người dùng nhìn thấy | Không có gì (đạt) hoặc 403 (không đạt) | Tiện ích thử thách hoặc trang JS |
| Trạng thái HTTP không thành công | 403 | 503 |
| Có thể giải quyết được? | Không - sửa tiêu đề nếu không nó sẽ chặn | Có — giải CAPTCHA |
| Đã phát hành cookie | Không | <staging-session-cookie> |
| Cần CaptchaAI? | Không - sửa tiêu đề yêu cầu | Có |
| Bật mặc định | Có (tất cả các gói Cloudflare) | Không (được định cấu hình theo quy tắc) |
| Áp dụng cho | Mọi yêu cầu | Chỉ phù hợp với quy tắc WAF |
Kiểm tra tính toàn vẹn của trình duyệt (BIC)
BIC đánh giá các tiêu đề yêu cầu HTTP để phát hiện lưu lượng truy cập không phải trình duyệt. Nó chạy trước bất kỳ thử thách JavaScript hoặc CAPTCHA nào.
BIC kiểm tra những gì
| Kiểm tra | Nó tìm kiếm cái gì | Những hư hỏng thường gặp |
|---|---|---|
| Xác thực tác nhân người dùng | UA bị thiếu, trống hoặc UA đã biết là xấu | python-requests/2.31, cuộn tròn, wget |
| Thứ tự tiêu đề | Tiêu đề có thứ tự bất thường | Thư viện HTTP không phải trình duyệt |
| Thiếu tiêu đề trình duyệt | Thiếu Accept, Accept-Language, Accept-Encoding |
Máy khách HTTP tối thiểu |
| Chữ ký bot đã biết | UA gửi thư rác, UA quét | Googlebot từ các IP không phải của Google |
| Lạm dụng danh sách đen IP | IP độc hại đã biết | IP trung tâm dữ liệu trên danh sách chặn |
dòng chảy BIC
Request hits Cloudflare edge
↓
BIC evaluates HTTP headers:
├─ User-Agent present and valid?
├─ Required headers (Accept, Accept-Language) present?
├─ Header order consistent with browser?
└─ IP not on abuse list?
↓
Pass → Request forwarded to origin
OR
Fail → 403 Forbidden (no challenge offered)
Đậu BIC
BIC được giải quyết bằng cách gửi các tiêu đề giống trình duyệt thích hợp. Không cần giải pháp CAPTCHA:
import requests
# ❌ FAILS BIC — minimal headers
response = requests.get("https://cloudflare-protected.com")
# User-Agent: python-requests/2.31.0
# Result: 403 Forbidden
# ✅ PASSES BIC — browser-like headers
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
"image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
}
response = requests.get("https://cloudflare-protected.com", headers=headers)
# Result: 200 OK (passed BIC)
Node.js
const axios = require("axios");
// Browser-like headers to pass BIC
const headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0",
Accept:
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
Connection: "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
};
async function fetchWithBIC(url) {
const response = await axios.get(url, { headers });
console.log(`Status: ${response.status}`);
return response.data;
}
Thử thách CAPTCHA
Thử thách CAPTCHA diễn ra sau khi BIC vượt qua. Chúng yêu cầu thực thi JavaScript và đưa ra một thách thức có thể giải quyết được:
Các loại thử thách CAPTCHA của Cloudflare
| Loại thử thách | Trình kích hoạt | Hiển thị với người dùng? | Phương pháp CaptchaAI |
|---|---|---|---|
| Tiện ích cửa quay | Được nhà phát triển nhúng vào trang | Tiện ích trên biểu mẫu | turnstile |
| Thử thách được quản lý | Trận đấu quy tắc WAF | Thích ứng (vô hình/checkbox) | turnstile |
| Thử thách JavaScript | Quy tắc IUAM hoặc WAF | Trang "Kiểm tra trình duyệt của bạn" | cloudflare_challenge |
| Thử thách tương tác | Sự nghi ngờ cao | Thử thách toàn trang | cloudflare_challenge |
Luồng thử thách (khác với BIC)
Request passes BIC check
↓
WAF rules evaluate bot score, IP, path
↓
Rule triggers CAPTCHA challenge (HTTP 503)
↓
Browser executes JavaScript challenge
↓
Challenge solved → <staging-session-cookie> cookie issued
↓
Subsequent requests pass with cookie
Phân biệt các khối BIC với các thử thách CAPTCHA
Khi yêu cầu của bạn bị chặn, việc xác định loại sẽ xác định cách khắc phục:
import requests
def diagnose_cloudflare_block(url):
"""Determine if block is BIC or CAPTCHA."""
# Intentionally use minimal headers to trigger BIC
minimal_response = requests.get(url, timeout=15, allow_redirects=False)
# Use browser headers to bypass BIC
browser_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/120.0.0.0",
"Accept": "text/html,application/xhtml+xml,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
}
browser_response = requests.get(
url, headers=browser_headers, timeout=15, allow_redirects=False
)
result = {
"minimal_headers_status": minimal_response.status_code,
"browser_headers_status": browser_response.status_code,
}
if minimal_response.status_code == 403 and browser_response.status_code == 200:
result["diagnosis"] = "BIC only — fix headers to pass"
result["fix"] = "Add browser-like headers"
elif minimal_response.status_code == 403 and browser_response.status_code == 403:
result["diagnosis"] = "IP or WAF block — not just BIC"
result["fix"] = "Change IP or check WAF rules"
elif browser_response.status_code == 503:
html = browser_response.text
if "jschl" in html:
result["diagnosis"] = "IUAM JavaScript challenge"
result["fix"] = "Use CaptchaAI cloudflare_challenge method"
elif "cf-turnstile" in html or "challenge-platform" in html:
result["diagnosis"] = "Managed/Turnstile challenge"
result["fix"] = "Use CaptchaAI turnstile method"
else:
result["diagnosis"] = "Unknown Cloudflare challenge"
result["fix"] = "Inspect page source for challenge type"
elif browser_response.status_code == 200:
html = browser_response.text
if "cf-turnstile" in html:
result["diagnosis"] = "Page loads but has Turnstile widget"
result["fix"] = "Use CaptchaAI turnstile method for form submission"
else:
result["diagnosis"] = "No challenge — page accessible"
result["fix"] = "None needed"
return result
# Usage
diagnosis = diagnose_cloudflare_block("https://example-cf-site.com")
print(f"Diagnosis: {diagnosis['diagnosis']}")
print(f"Fix: {diagnosis['fix']}")
Các tình huống phổ biến
Tình huống 1: Chỉ khối BIC
Request with python-requests UA → 403
Request with Chrome UA → 200 ✓
Fix: Add proper browser headers. No CaptchaAI needed.
Tình huống 2: Vượt qua BIC, sau đó là CAPTCHA
Request with Chrome UA → 503 (challenge page)
Fix: Headers are fine. Dùng CaptchaAI để solve the challenge.
Tình huống 3: BIC + CAPTCHA kết hợp
Request with python-requests UA → 403 (BIC block)
Request with Chrome UA → 503 (CAPTCHA challenge)
Fix: First fix headers, then solve CAPTCHA with CaptchaAI.
Kịch bản 4: Không - Khối IP
Request with python-requests UA → 403
Request with Chrome UA → 403
Fix: Neither BIC nor solvable challenge. IP is blocked.
Try different IP/proxy.
Các phương pháp hay nhất về tiêu đề
Các tiêu đề cần thiết để vượt qua BIC
CLOUDFLARE_SAFE_HEADERS = {
# Mandatory
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
# Strongly recommended
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
# Sec-Fetch headers (modern Chrome)
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
# Recommended for consistency
"Sec-Ch-Ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": '"Windows"',
}
Tiêu đề kích hoạt chặn BIC
| tiêu đề | Tại sao nó thất bại |
|---|---|
User-Agent: python-requests/2.31.0 |
Mã định danh thư viện HTTP đã biết |
User-Agent: curl/7.81.0 |
Mã định danh công cụ CLI |
Thiếu tiêu đề Accept |
Không có trình duyệt nào bỏ qua Chấp nhận |
Thiếu Accept-Language |
Tất cả các trình duyệt gửi cái này |
User-Agent: "" (trống) |
Không hợp lệ - tự động hóa rõ ràng |
User-Agent: Googlebot/2.1 từ IP không phải của Google |
Danh tính bot giả |
Khắc phục sự cố
| Triệu chứng | nguyên nhân | sửa chữa |
|---|---|---|
| 403 với tiêu đề tối thiểu, 200 với tiêu đề trình duyệt | chỉ có BIC | Sử dụng tiêu đề giống trình duyệt |
| 403 với tất cả các kết hợp tiêu đề | IP bị chặn hoặc quy tắc WAF | Hãy thử IP hoặc proxy khác |
| 503 với trang thử thách | Thử thách CAPTCHA (không phải BIC) | Sử dụng CaptchaAI |
| 403 không liên tục | Giới hạn tỷ lệ hoặc dựa trên phiên | Tỷ lệ yêu cầu thấp hơn, duy trì phiên |
| Tiêu đề đúng nhưng vẫn 403 | Kiểm tra dấu vân tay TLS (JA3) | Sử dụng curl_cffi hoặc trình duyệt thực |
Câu hỏi thường gặp
Tôi có thể tắt BIC cho trang web của mình không?
Vâng. Người vận hành trang web có thể tắt BIC trong bảng điều khiển Cloudflare trong phần Bảo mật > Cài đặt. Nó được bật theo mặc định trên tất cả các gói.
BIC có kiểm tra dấu vân tay TLS không?
Không trực tiếp. BIC tập trung vào tiêu đề HTTP. Tuy nhiên, giải pháp Quản lý Bot (doanh nghiệp) rộng hơn của Cloudflare sẽ kiểm tra dấu vân tay JA3/JA4 TLS riêng biệt với BIC.
Nếu tôi vượt qua BIC, liệu tôi có còn nhận được CAPTCHA không?
Vâng. Các thử thách BIC và CAPTCHA là các lớp độc lập. Việc vượt qua BIC có nghĩa là tiêu đề của bạn trông hợp pháp. Bạn vẫn có thể kích hoạt CAPTCHA từ các quy tắc WAF, tính điểm bot hoặc chế độ IUAM.
CaptchaAI có hỗ trợ BIC không?
Không — BIC không đưa ra một thách thức có thể giải quyết được. Sửa tiêu đề HTTP của bạn để vượt qua BIC. CaptchaAI xử lý các thử thách CAPTCHA (Thử thách Turnstile, JavaScript, Thử thách được quản lý) xuất hiện sau khi BIC vượt qua.
Tiêu đề Sec-Fetch ảnh hưởng đến BIC như thế nào?
Chrome hiện đại tự động gửi tiêu đề Sec-Fetch-*. Sự vắng mặt của chúng không phải lúc nào cũng kích hoạt BIC, nhưng việc bao gồm chúng sẽ khiến hồ sơ yêu cầu của bạn nhất quán hơn với trình duyệt thực.
Tóm tắt
Kiểm tra tính toàn vẹn trình duyệt của Cloudflare chặn các yêu cầu có giao diện rõ ràng không phải của trình duyệt (403), trong khi các thử thách CAPTCHA đưa ra các nhiệm vụ có thể giải quyết được (503). BIC được sửa bằng cách sử dụng các tiêu đề giống trình duyệt thích hợp - khôngCaptchaAIcần thiết. Các thử thách CAPTCHA yêu cầu Bộ giải CaptchaAI hoặc Cloudflare Challenge của CaptchaAI. Luôn chẩn đoán loại khối trước tiên: sửa tiêu đề cho BIC, sử dụng CaptchaAI cho CAPTCHA và thay đổi IP cho khối cứng.
bài viết liên quan
- Cloudflare Challenge Vs Phát hiện cửa quay
- So sánh Geetest và Cloudflare Turnstile
- Thử thách tương tác và quản lý Cloudflare