So Sánh

CAPTCHA văn bản và CAPTCHA hình ảnh: So sánh giữa nhà phát triển

Văn bản CAPTCHA yêu cầu người dùng gõ các chữ cái và số bị biến dạng. CAPTCHA hình ảnh yêu cầu người dùng chọn các đối tượng cụ thể từ ảnh (đèn giao thông, lối qua đường, xe buýt). Cả hai đều nhằm mục đích chặn bot, nhưng chúng khác nhau về độ mạnh bảo mật, trải nghiệm người dùng, khả năng truy cập và độ phức tạp tự động hóa. Sự so sánh này giúp các nhà phát triển hiểu họ đang phải đối mặt với loại nào và cách mỗi loại tích hợp vào quy trình làm việc của họ.


Cách hoạt động của CAPTCHA văn bản

CAPTCHA văn bản hiển thị các ký tự bị biến dạng dưới dạng hình ảnh. Người dùng đọc các ký tự và nhập chúng vào trường văn bản.

Kỹ thuật CAPTCHA văn bản phổ biến

Kỹ thuật Mục đích
Biến dạng ký tự Uốn cong các chữ cái để ngăn chặn OCR đơn giản
Tiếng ồn nền Thêm dòng, dấu chấm hoặc dải màu phía sau văn bản
Chồng chéo ký tự Chồng chéo các chữ cái liền kề để ngăn chặn sự phân đoạn
Phông chữ ngẫu nhiên Sử dụng nhiều phông chữ và kích cỡ cho mỗi thử thách
Biến đổi màu sắc Chọn ngẫu nhiên màu nhân vật và màu nền

Luồng văn bản CAPTCHA

Server generates random string (e.g., "X7mK9p")
    ↓
Applies distortion: warping, noise, overlap
    ↓
Renders as PNG/JPEG image
    ↓
User reads characters, types into input field
    ↓
Server compares input against stored string (case-insensitive usually)

Cách hoạt động của CAPTCHA hình ảnh

CAPTCHA hình ảnh hiển thị một mạng lưới các bức ảnh và yêu cầu người dùng chọn những hình ảnh phù hợp với một danh mục.

Các loại CAPTCHA hình ảnh phổ biến

loại Thử thách nhà cung cấp
Lựa chọn lưới "Chọn tất cả các ô vuông có đèn giao thông" reCAPTCHA v2
Ghi nhãn hình ảnh "Nhấp vào tất cả hình ảnh có xe buýt" hCaptcha
Đếm đối tượng "Có bao nhiêu chiếc xe đạp trong hình ảnh này?" tùy chỉnh
Xoay "Xoay hình ảnh theo đúng hướng" Captcha vui nhộn

Luồng CAPTCHA hình ảnh

Server selects images from a labeled dataset
    ↓
Presents 3×3 or 4×4 grid with a text prompt
    ↓
User clicks matching images
    ↓
Server validates selections against ground truth
    ↓
If fading images: new images load in place of selected ones (multi-round)

So sánh đối đầu

Kích thước Văn bản CAPTCHA CAPTCHA hình ảnh
Mức độ bảo mật Thấp - OCR hiện đại giải quyết được hơn 95% Cao - yêu cầu nhận dạng đối tượng
Thời gian giải quyết của người dùng 5-10 giây 10-30 giây
Tỷ lệ thất bại (con người) 15-20% 8-15%
Khả năng tiếp cận Nghèo cho người khiếm thị Rất nghèo cho người khiếm thị
Thân thiện với thiết bị di động Trung bình (ký tự nhỏ) Tốt (lựa chọn dựa trên nhấn)
Độ khó tự động hóa Dễ dàng (OCR) Cứng (phân loại hình ảnh)
Chi phí triển khai Miễn phí (tự lưu trữ) Miễn phí hoặc trả phí (API của bên thứ ba)
Chi phí bỏ qua bot 0,50 USD- 1,00 USD trên 1.000 $1,50-$3,00 trên 1.000
Thu thập dữ liệu không có Có thể đào tạo các mô hình ML (reCAPTCHA)
Nỗ lực thực hiện Tối thiểu (tạo hình ảnh phía máy chủ) Trung bình (tích hợp SDK JavaScript)

Phát hiện CAPTCHA văn bản và hình ảnh

Phát hiện Python

import requests
from bs4 import BeautifulSoup
import re

def detect_captcha_type(url):
    """Detect whether page uses text or image CAPTCHA."""
    response = requests.get(url, timeout=10)
    soup = BeautifulSoup(response.text, "html.parser")
    html = response.text

    result = {"text_captcha": False, "image_captcha": False, "provider": None}

    # Check for reCAPTCHA (image-based)
    if "google.com/recaptcha" in html or "g-recaptcha" in html:
        result["image_captcha"] = True
        result["provider"] = "reCAPTCHA"
        return result

    # Check for hCaptcha (image-based)
    if "hcaptcha.com" in html or "h-captcha" in html:
        result["image_captcha"] = True
        result["provider"] = "hCaptcha"
        return result

    # Check for text CAPTCHA patterns
    captcha_images = soup.find_all("img", attrs={
        "src": re.compile(r"captcha", re.I)
    })
    captcha_inputs = soup.find_all("input", attrs={
        "name": re.compile(r"captcha", re.I)
    })

    if captcha_images and captcha_inputs:
        # Image with text input = text CAPTCHA
        result["text_captcha"] = True
        result["provider"] = "custom text CAPTCHA"
        return result

    # Check for FunCaptcha (image-based rotation)
    if "funcaptcha" in html.lower() or "arkoselabs" in html.lower():
        result["image_captcha"] = True
        result["provider"] = "FunCaptcha"
        return result

    return result

captcha = detect_captcha_type("https://staging.example.com/qa-login")
print(captcha)

Phát hiện Node.js

const axios = require("axios");
const cheerio = require("cheerio");

async function detectCaptchaType(url) {
    const { data: html } = await axios.get(url, { timeout: 10000 });
    const $ = cheerio.load(html);

    const result = { textCaptcha: false, imageCaptcha: false, provider: null };

    // reCAPTCHA detection
    if (html.includes("google.com/recaptcha") || html.includes("g-recaptcha")) {
        result.imageCaptcha = true;
        result.provider = "reCAPTCHA";
        return result;
    }

    // hCaptcha detection
    if (html.includes("hcaptcha.com") || html.includes("h-captcha")) {
        result.imageCaptcha = true;
        result.provider = "hCaptcha";
        return result;
    }

    // Text CAPTCHA: image + input with "captcha" in name/class
    const captchaImgs = $("img[src*='captcha' i]").length;
    const captchaInputs = $("input[name*='captcha' i]").length;

    if (captchaImgs > 0 && captchaInputs > 0) {
        result.textCaptcha = true;
        result.provider = "custom text CAPTCHA";
        return result;
    }

    return result;
}

detectCaptchaType("https://staging.example.com/qa-login").then(console.log);

Giải CAPTCHA văn bản bằng CaptchaAI

Cốt lõi của CAPTCHA văn bản là dựa trên hình ảnh — văn bản bị biến dạng được hiển thị dưới dạng PNG hoặc JPEG. API OCR hình ảnh của CaptchaAI xử lý trực tiếp những điều này.

import requests
import base64
import time

API_KEY = "YOUR_API_KEY"

# Get the CAPTCHA image
captcha_url = "https://example.com/captcha.png"
image_data = requests.get(captcha_url).content
b64 = base64.b64encode(image_data).decode()

# Submit to CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "base64",
    "body": b64,
    "json": 1,
})
task_id = submit.json()["request"]

# Poll for result
for _ in range(30):
    time.sleep(3)
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if resp.get("status") == 1:
        print(f"CAPTCHA text: {resp['request']}")
        break

CaptchaAI hỗ trợ hơn 27.500 loại CAPTCHA hình ảnh, bao gồm văn bản bị biến dạng, phương trình toán học và các thử thách nhận dạng ký tự.


Khi nào nên sử dụng loại CAPTCHA nào

Chọn CAPTCHA văn bản khi:

  • Bạn cần một giải pháp tự lưu trữ, không phụ thuộc
  • Cơ sở người dùng của bạn có các yêu cầu về khả năng truy cập (CAPTCHA văn bản có thể có các lựa chọn thay thế âm thanh)
  • Lưu lượng bot thấp và bạn cần ngăn chặn thư rác cơ bản
  • Bạn muốn tránh việc thu thập dữ liệu của bên thứ ba

Chọn CAPTCHA hình ảnh khi:

  • Bạn cần bảo vệ bot mạnh mẽ
  • Ứng dụng của bạn xử lý dữ liệu nhạy cảm (đăng nhập, thanh toán)
  • Bạn có thể chấp nhận ma sát người dùng cao hơn
  • Bạn muốn một giải pháp được quản lý với các bản cập nhật liên tục

Chọn không khi:

  • CAPTCHA vô hình (reCAPTCHA v3, Cloudflare Turnstile) có thể xử lý lưu lượng truy cập của bạn mà không cần bất kỳ tương tác nào của người dùng

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

Loại CAPTCHA nào dễ truy cập hơn?

Không có loại nào thực sự có thể truy cập được. CAPTCHA văn bản rất khó đối với người dùng khiếm thị trừ khi được cung cấp giải pháp thay thế âm thanh. CAPTCHA hình ảnh còn tệ hơn - tác vụ chọn lưới không thể sử dụng được với trình đọc màn hình. CAPTCHA vô hình (reCAPTCHA v3, Cloudflare Turnstile) là tùy chọn dễ tiếp cận nhất vì chúng không yêu cầu sự tương tác của người dùng.

CAPTCHA văn bản có còn hiệu lực vào năm 2025 không?

Không. Công cụ OCR hiện đại giải quyết CAPTCHA văn bản tiêu chuẩn với độ chính xác trên 95%. CAPTCHA văn bản bị biến dạng nặng có thể giảm tỷ lệ này xuống 80-85%, nhưng phải trả giá bằng khả năng đọc của con người. CAPTCHA văn bản hiện chặn nhiều người dùng hợp pháp hơn bot.

Loại nào rẻ hơn để giải quyết bằng API?

CAPTCHA văn bản rẻ hơn. Chi phí giải quyết dựa trên OCR khoảng $0,50-$1,00 cho mỗi 1.000 lần giải. CAPTCHA hình ảnh (reCAPTCHA, hCaptcha) có giá $1,50-$3,00 cho mỗi 1.000 lần giải quyết vì chúng yêu cầu xử lý phức tạp hơn.

CaptchaAI có thể giải được cả CAPTCHA văn bản và hình ảnh không?

Vâng. CaptchaAI giải quyết CAPTCHA văn bản thông qua API OCR hình ảnh (được hỗ trợ hơn 27.500 loại) và CAPTCHA hình ảnh thông qua các trình giải quyết hình ảnh lưới, hCaptcha và reCAPTCHA.


Tóm tắt

CAPTCHA văn bản rất đơn giản, triển khai ít tốn kém và dễ dàng vượt qua bằng OCR. CAPTCHA hình ảnh khó tự động hóa hơn và cung cấp khả năng bảo vệ bot mạnh mẽ hơn nhưng lại gây khó chịu cho người dùng hơn. Đối với các nhà phát triển xây dựng quy trình tự động hóa, CAPTCHA văn bản chỉ yêu cầu OCR (dễ dàng được xử lý bởiOCR hình ảnh của CaptchaAI), trong khi CAPTCHA hình ảnh yêu cầu các bộ giải chuyên dụng như API reCAPTCHA hoặc hCaptcha của CaptchaAI. Vào năm 2025, xu hướng hướng tới CAPTCHA vô hình giúp loại bỏ hoàn toàn sự cản trở của người dùng.

bài viết liên quan

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