Phân Tích Kỹ Thuật

Giải thích về hệ thống CAPTCHA vô hình: Cách chúng hoạt động

CAPTCHA ẩn xác minh người dùng mà không hiển thị thách thức rõ ràng. Không có hộp kiểm để nhấp vào, không có lưới hình ảnh để giải quyết và không có văn bản để nhập. Việc xác minh diễn ra hoàn toàn trong nền thông qua JavaScript để phân tích hành vi của trình duyệt, tín hiệu thiết bị và danh tiếng mạng. Nếu quy trình tự động hóa của bạn gặp phải một biểu mẫu gửi rõ ràng cho một số người dùng nhưng chặn những người khác — không có CAPTCHA hiển thị trên trang — thì bạn đang xử lý một hệ thống CAPTCHA vô hình.


CAPTCHA vô hình hoạt động như thế nào

Tất cả CAPTCHA vô hình đều tuân theo cùng một mẫu cốt lõi:

Page loads → CAPTCHA JavaScript injected
    ↓
Script runs in background, collecting signals:
  ├─ Browser fingerprint (canvas, WebGL, fonts, plugins)
  ├─ Behavioral data (mouse, keyboard, scroll, timing)
  ├─ Network data (IP reputation, TLS fingerprint)
  ├─ Device data (screen, GPU, CPU cores, memory)
  └─ History data (cookies, previous CAPTCHA completions)
    ↓
Signals sent to CAPTCHA provider's risk engine
    ↓
Risk score computed
    ↓
Response varies by score:
  ├─ Low risk  → Token issued silently (user sees nothing)
  ├─ Medium    → Light challenge shown (checkbox, simple click)
  └─ High risk → Full challenge (image grid) or block

Điểm khác biệt chính so với CAPTCHA hiển thị: quá trình xác minh diễn ra liên tục kể từ thời điểm tải trang chứ không chỉ khi người dùng nhấp vào hộp kiểm.


Các hệ thống CAPTCHA vô hình chính

1. reCAPTCHA v3

Nhà cung cấp: Google Phát hành: 2018 Thị phần: Cao nhất trong số CAPTCHA vô hình

reCAPTCHA v3 trả về điểm dấu phẩy động trong khoảng từ 0,0 đến 1,0 cho mỗi hành động trên trang. Chủ sở hữu trang web quyết định phải làm gì với điểm số.

Cách thu thập tín hiệu:

<!-- reCAPTCHA v3 integration -->
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
<script>
  grecaptcha.ready(function() {
    grecaptcha.execute('SITE_KEY', { action: 'login' }).then(function(token) {
      // Token sent to server for verification
      document.getElementById('captcha-token').value = token;
    });
  });
</script>

Cuộc gọi execute() kích hoạt việc thu thập tín hiệu theo yêu cầu. Đằng sau hậu trường, reCAPTCHA đã thu thập dữ liệu kể từ khi tập lệnh được tải.

Giải thích điểm số:

Điểm Ý nghĩa Hành động điển hình
0,9 Rất có thể con người Cho phép
0,7 Có lẽ là con người Cho phép có giám sát
0,5 không chắc chắn Yêu cầu xác minh bổ sung
0,3 Có lẽ là bot Chặn hoặc hiển thị reCAPTCHA v2
0,1 Rất có thể bot Chặn

Phát hiện trong nguồn trang:

import requests
import re

def detect_recaptcha_v3(url):
    html = requests.get(url, timeout=10).text
    indicators = {
        "recaptcha_v3": False,
        "site_key": None,
        "actions": [],
    }

    # Check for v3 script
    if "recaptcha/api.js?render=" in html:
        indicators["recaptcha_v3"] = True
        match = re.search(r"render=([A-Za-z0-9_-]+)", html)
        if match:
            indicators["site_key"] = match.group(1)

    # Find action names
    actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
    indicators["actions"] = actions

    return indicators

print(detect_recaptcha_v3("https://staging.example.com/qa-login"))

2. Cloudflare Turnstile

Nhà cung cấp: Cloudflare Phát hành: 2022 Thị phần: Tăng trưởng nhanh nhất

Turnstile sử dụng quy trình xác minh nhiều giai đoạn mà không yêu cầu thu thập dữ liệu người dùng.

Các giai đoạn xác minh:

  1. Kiểm tra mã thông báo truy cập riêng — Nếu trình duyệt hỗ trợ Apple PAT, quá trình xác minh sẽ hoàn tất ngay lập tức
  2. Thử thách không tương tác — Trình duyệt giải quyết một câu đố nhẹ về bằng chứng công việc bằng mật mã
  3. Thử thách được quản lý — Cloudflare quyết định giữa không tương tác và tương tác dựa trên các tín hiệu rủi ro từ mạng của nó (hơn 20% lưu lượng truy cập internet chảy qua Cloudflare)
  4. Thử thách tương tác — Chỉ hiển thị khi điểm rủi ro cao; hiển thị tiện ích kiểu hộp kiểm

Tích hợp:

<!-- Turnstile widget -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Phát hiện:

def detect_turnstile(url):
    html = requests.get(url, timeout=10).text
    indicators = {
        "turnstile": False,
        "site_key": None,
    }

    if "challenges.cloudflare.com/turnstile" in html or "cf-turnstile" in html:
        indicators["turnstile"] = True
        match = re.search(r'data-sitekey="([^"]+)"', html)
        if match:
            indicators["site_key"] = match.group(1)

    return indicators

3. reCAPTCHA v2 Vô hình

Nhà cung cấp: Google Phát hành: 2017

Đây là reCAPTCHA v2 được kích hoạt theo chương trình khi gửi biểu mẫu. Không có hộp kiểm nào hiển thị — người dùng nhấp vào nút gửi và reCAPTCHA chạy trong nền. Nếu điểm rủi ro đủ cao, thử thách hình ảnh hiển thị sẽ xuất hiện dưới dạng cửa sổ bật lên.

Tích hợp:

<button class="g-recaptcha"
        data-sitekey="SITE_KEY"
        data-callback="onSubmit"
        data-size="invisible">
    Submit
</button>

Sự khác biệt chính so với v3: v2 Invisible vẫn là một thách thức rõ ràng đối với những người dùng có nhiều rủi ro. v3 không bao giờ hiển thị một thách thức rõ ràng — trang web phải quyết định phải làm gì với điểm số.

4. hCaptcha thụ động (Doanh nghiệp)

Nhà cung cấp: Máy trực giác Tính khả dụng: Chỉ dành cho cấp doanh nghiệp

Chế độ thụ động của hCaptcha Enterprise đánh giá người dùng mà không có bất kỳ tiện ích hiển thị nào. Nó sử dụng các tín hiệu hành vi tương tự như hCaptcha tiêu chuẩn nhưng chỉ đưa ra thách thức trực quan đối với những khách truy cập đáng ngờ nhất.

5. Mã thông báo truy cập riêng tư của Apple

Nhà cung cấp: Apple Tính khả dụng: iOS 16+, macOS Ventura+

Đây không phải là nhà cung cấp CAPTCHA mà là cơ chế bỏ qua CAPTCHA. Các thiết bị của Apple chứng minh rằng chúng hợp pháp thông qua chứng thực phần cứng, cho phép các trang web bỏ qua hoàn toàn CAPTCHA.

Device attestation:

  1. Website requests a challenge from a token issuer
  2. Device proves it is genuine without revealing identity
  3. Token issuer generates a blind-signed token
  4. Website verifies token → CAPTCHA skipped

Được hỗ trợ bởi Cloudflare, Fastly và các nhà cung cấp CDN khác.


Giải CAPTCHA vô hình bằng CaptchaAI

CAPTCHA vô hình vẫn tạo mã thông báo phải được gửi cùng với biểu mẫu. Trình giải mã dựa trên API tạo ra các mã thông báo này từ bên ngoài.

Giải reCAPTCHA v3

import requests
import time

API_KEY = "YOUR_API_KEY"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9",
    "pageurl": "https://staging.example.com/qa-login",
    "version": "v3",
    "action": "login",
    "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": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        print(f"reCAPTCHA v3 token received (score ≥ 0.9)")
        break

Giải Cloudflare Turnstile

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
    "pageurl": "https://example.com/signup",
    "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": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        turnstile_token = result["request"]
        print(f"Turnstile token received")
        break

Node.js - Giải reCAPTCHA v3

const axios = require("axios");

async function solveRecaptchaV3(siteKey, pageUrl, action) {
    const API_KEY = "YOUR_API_KEY";

    // Submit
    const { data: submit } = await axios.post(
        "https://ocr.captchaai.com/in.php",
        new URLSearchParams({
            key: API_KEY,
            method: "userrecaptcha",
            googlekey: siteKey,
            pageurl: pageUrl,
            version: "v3",
            action: action,
            json: 1,
        })
    );

    const taskId = submit.request;

    // Poll
    for (let i = 0; i < 60; i++) {
        await new Promise((r) => setTimeout(r, 5000));
        const { data: result } = await axios.get(
            "https://ocr.captchaai.com/res.php",
            {
                params: {
                    key: API_KEY,
                    action: "get",
                    id: taskId,
                    json: 1,
                },
            }
        );

        if (result.status === 1) {
            return result.request;
        }
    }

    throw new Error("Solve timeout");
}

solveRecaptchaV3("SITE_KEY", "https://staging.example.com/qa-login", "login")
    .then((token) => console.log("Token:", token.substring(0, 50) + "..."));

Phát hiện CAPTCHA vô hình: trình kiểm tra toàn diện

import requests
import re

def detect_invisible_captcha(url):
    """Detect all invisible CAPTCHA types on a page."""
    html = requests.get(url, timeout=10).text

    results = []

    # reCAPTCHA v3
    if "recaptcha/api.js?render=" in html:
        key = re.search(r"render=([A-Za-z0-9_-]+)", html)
        results.append({
            "type": "reCAPTCHA v3",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "userrecaptcha (version=v3)",
        })

    # reCAPTCHA v2 invisible
    if 'data-size="invisible"' in html and "g-recaptcha" in html:
        key = re.search(r'data-sitekey="([^"]+)"', html)
        results.append({
            "type": "reCAPTCHA v2 Invisible",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "userrecaptcha (invisible=1)",
        })

    # Cloudflare Turnstile
    if "challenges.cloudflare.com/turnstile" in html:
        key = re.search(r'data-sitekey="([^"]+)"', html)
        results.append({
            "type": "Cloudflare Turnstile",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "turnstile",
        })

    # hCaptcha (passive mode detected by script without visible widget)
    if "hcaptcha.com/1/api.js" in html and 'data-size="invisible"' in html:
        results.append({
            "type": "hCaptcha Passive",
            "solver_method": "hcaptcha",
        })

    if not results:
        results.append({"type": "none detected"})

    return results

for item in detect_invisible_captcha("https://example.com"):
    print(item)

So sánh CAPTCHA vô hình

tính năng reCAPTCHA v3 cửa quay reCAPTCHA v2 Vô hình hCaptcha Bị động
Thử thách hiển nhiên không bao giờ hiếm khi Đôi khi (dự phòng) hiếm khi
Quyền riêng tư Thu thập dữ liệu duyệt web Không có dữ liệu cá nhân Thu thập dữ liệu duyệt web Thu thập dữ liệu tương tác
Chi phí Miễn phí (1M/month) Miễn phí (không giới hạn) Miễn phí (1M/month) Chỉ dành cho doanh nghiệp
Điểm được trả về Có (0,0-1,0) Không (vượt qua/fail) Không (vượt qua/fail) Có (Doanh nghiệp)
Thử thách hiển thị dự phòng Trang web quyết định Được quản lý bởi Cloudflare Cửa sổ bật lên lưới hình ảnh Cửa sổ bật lên lưới hình ảnh
Hỗ trợ CaptchaAI Có (mã thông báo v3) Có (tỷ lệ thành công cao) Có (mã thông báo) Liên hệ hỗ trợ

Ví dụ về chính sách tính điểm

  • Xác định điều gì sẽ xảy ra đối với điểm cao, trung bình và thấp trước khi luồng công việc tiếp cận lưu lượng sản xuất.
  • Sử dụng kết quả đạt điểm trung bình để kích hoạt các bước kiểm tra nâng cao thay vì coi mọi điểm dưới mục tiêu đều là thất bại.
  • Phân bổ điểm nhật ký theo thời gian để hiển thị độ lệch ngưỡng phía mục tiêu trước khi giảm chuyển đổi.

Câu hỏi thường gặp

Làm cách nào để biết một trang có CAPTCHA ẩn hay không?

Kiểm tra nguồn trang để tìm tập lệnh của nhà cung cấp CAPTCHA. Tìm kiếm recaptcha/api.js?render= (reCAPTCHA v3), challenges.cloudflare.com/turnstile (Turnstile) hoặc hcaptcha.com/1/api.jsdata-size="invisible" (hCaptcha thụ động). Tiện ích CAPTCHA không hiển thị rõ ràng trên trang, vì vậy bạn phải kiểm tra các yêu cầu mạng hoặc HTML.

CAPTCHA vô hình vẫn tạo ra mã thông báo phải không?

Vâng. CAPTCHA vô hình tạo ra mã thông báo phải được đưa vào khi gửi biểu mẫu. Mã thông báo được đặt trong trường biểu mẫu ẩn hoặc được gửi dưới dạng tham số yêu cầu. Trình giải mã dựa trên API tạo ra các mã thông báo này từ bên ngoài.

CAPTCHA vô hình có thể chặn quá trình tự động hóa của tôi mà không hiển thị bất kỳ lỗi nào không?

Vâng. Nếu quá trình tự động hóa của bạn không bao gồm mã thông báo CAPTCHA hợp lệ khi gửi biểu mẫu thì máy chủ sẽ âm thầm từ chối yêu cầu hoặc trả về lỗi chung. Sẽ không có thử thách CAPTCHA nào hiển thị - yêu cầu đơn giản là không thành công vì mã thông báo bị thiếu hoặc không hợp lệ.

reCAPTCHA v3 có an toàn hơn reCAPTCHA v2 không?

reCAPTCHA v3 khó phát hiện trực quan hơn (không có tiện ích trên trang) nhưng không nhất thiết phải an toàn hơn. v3 trả về điểm mà trang web phải hành động — nếu ngưỡng được đặt quá thấp, bot sẽ dễ dàng vượt qua. v2 tạo ra một thách thức dứt khoát/response. Trong thực tế, v3 với ngưỡng nghiêm ngặt (0,7+) cộng với v2 làm dự phòng sẽ cung cấp khả năng bảo mật tốt nhất.


Tóm tắt

CAPTCHA ẩn xác minh người dùng thông qua phân tích JavaScript nền về hành vi trình duyệt, dấu vân tay của thiết bị và danh tiếng mạng — mà không có bất kỳ tương tác rõ ràng nào. reCAPTCHA v3 và Cloudflare Turnstile là những triển khai vượt trội, trong đó Turnstile phát triển nhanh nhất nhờ giá miễn phí và thiết kế ưu tiên quyền riêng tư. Để tự động hóa, CAPTCHA vô hình vẫn yêu cầu mã thông báo hợp lệ. Sử dụngCaptchaAIđể tạo các mã thông báo này: reCAPTCHA v3 thông qua phương pháp userrecaptcha với version=v3 và Cloudflare Turnstile thông qua phương pháp turnstile với tỷ lệ thành công cao.

bài viết liên quan

Os comentários estão desativados para este artigo.