logo
bars

CAPTCHA hình ảnh (ComplexImage)
và CapMonster Cloud

Giải CAPTCHA, cài đặt trên website và kiểm tra.
Bạn nhận lại một website đã có captcha hoặc lớp bảo vệ khác nhưng không có quyền truy cập mã nguồn? Khi đó điều bạn cần biết là giải pháp nào đang chạy, cấu hình có đúng không và cách kiểm tra như thế nào.

Trong bài viết này, chúng tôi đã cố gắng trả lời tất cả những câu hỏi quan trọng. Bước đầu tiên để bắt đầu giải quyết vấn đề là xác định hệ thống bảo mật nào đang được sử dụng. Để làm điều đó, bạn có thể tham khảo danh sách các captcha và hệ thống chống bot phổ biến, trong đó có các ví dụ minh họa và những dấu hiệu chính giúp bạn nhanh chóng nhận biết mình đang làm việc với giải pháp nào.

Nếu bạn phát hiện trang web của mình đang sử dụng ComplexImage, bước tiếp theo là tìm hiểu chi tiết hơn về các đặc tính và cách hoạt động của nó. Ngay trong bài viết này, bạn cũng có thể xem hướng dẫn tích hợp hệ thống ComplexImage để hiểu đầy đủ cách nó vận hành trên trang web của bạn. Điều đó giúp bạn không chỉ nắm rõ lớp bảo vệ hiện tại mà còn lập kế hoạch bảo trì một cách hợp lý.

CAPTCHA hình ảnh là gì
CAPTCHA hình ảnh là gì
CAPTCHA hình ảnh là loại CAPTCHA trực quan, yêu cầu người dùng thực hiện nhiệm vụ liên quan đến phân tích hình ảnh. Thông thường, hệ thống sẽ yêu cầu chọn các hình ảnh thỏa mãn điều kiện nhất định, đếm số đối tượng, xác định vị trí đúng của đối tượng hoặc thực hiện hành động trực quan khác. Khác với CAPTCHA văn bản, nơi người dùng chỉ nhập các ký tự từ hình ảnh, CAPTCHA hình ảnh kiểm tra khả năng giải thích thông tin hình ảnh và thực hiện các thao tác logic của người dùng. Điều này khiến việc nhận dạng tự động trở nên khó khăn hơn và bảo vệ hiệu quả các biểu mẫu đăng ký, đăng nhập và các điểm quan trọng khác trên website khỏi bot.

Cách giải CAPTCHA hình ảnh qua CapMonster Cloud

Khi kiểm tra các form với Tencent CAPTCHA, thường cần xác minh CAPTCHA hoạt động chính xác và được tích hợp đúng cách.
Bạn có thể kiểm tra CAPTCHA trên website của mình thủ công:
  • Mở trang có form và đảm bảo CAPTCHA hiển thị.
  • Thử gửi form mà không hoàn thành CAPTCHA — máy chủ phải trả lỗi.
  • Sau khi giải CAPTCHA thành công, form phải được gửi mà không có lỗi.
Để giải CAPTCHA tự động, bạn có thể sử dụng các dịch vụ chuyên dụng, ví dụ CapMonster Cloud — công cụ nhận các tham số CAPTCHA, xử lý trên máy chủ của họ và trả về kết quả hoàn chỉnh, ví dụ số hoặc tọa độ để nhấp, có thể dùng để vượt kiểm tra mà không cần người dùng tham gia.

Làm việc với CapMonster Cloud qua API thường gồm các bước:

Tạo nhiệm vụTạo nhiệm vụ
arrow
Gửi yêu cầu APIGửi yêu cầu API
arrow
Nhận kết quảNhận kết quả
arrow
Áp dụng token lên trangÁp dụng token lên trang
arrow
Nhận dạng CAPTCHA hình ảnh bằng thư viện có sẵn
Dịch vụ CapMonster Cloud cung cấp thư viện sẵn sàng sử dụng cho các ngôn ngữ Python, JavaScript (Node.js) và C#.
Python
JavaScript
C#
Nhập câu trả lời và gửi form
Ví dụ Node.js cho toàn bộ quá trình nhận dạng CAPTCHA trên trang web của bạn. Các cách tiếp cận: dùng HTTP request để lấy HTML và tham số hệ thống bảo vệ, gửi câu trả lời và xử lý kết quả. Hoặc như ví dụ dưới đây, dùng công cụ tự động hóa (Playwright) — mở trang, đợi kiểm tra, gửi tham số qua CapMonster Cloud, nhận kết quả, chèn vào trường thích hợp (có thể dùng dữ liệu đúng hoặc sai để kiểm tra) và xem kết quả.

// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, ComplexImageTaskRecognitionRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY";
const TARGET_URL = "https://example.com/captcha-page";

async function solveComplexImageTaskPlaywright() {
    const browser = await chromium.launch({ headless: false });
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto(TARGET_URL);

    // Tìm hình ảnh CAPTCHA
    const captchaHandle = await page.$('#captcha'); // thay bằng selector thực tế
    const captchaBase64 = await captchaHandle.evaluate(img => {
        const canvas = document.createElement('canvas');
        canvas.width = img.width;
        canvas.height = img.height;
        const ctx = canvas.getContext('2d');
        ctx.drawImage(img, 0, 0);
        return canvas.toDataURL('image/png').split(',')[1];
    });

    console.log("Captcha base64:", captchaBase64.substring(0, 50) + "...");

    const cmcClient = CapMonsterCloudClientFactory.Create(
        new ClientOptions({ clientKey: API_KEY })
    );

    // Gửi CAPTCHA để nhận dạng
    const citRecognitionRequest = new ComplexImageTaskRecognitionRequest({
        imagesBase64: [captchaBase64],
        metaData: { Task: 'oocl_rotate' } // thay bằng loại CAPTCHA của bạn
    });

    const result = await cmcClient.Solve(citRecognitionRequest);
    console.log("Solution received:", result);

    // Xử lý kết quả
    const solution = result.solution;

    if (!solution) {
        console.error("No solution received");
        return;
    }

    if (solution.metadata?.AnswerType === "Coordinate") {
        // CAPTCHA có tọa độ
        const box = await captchaHandle.boundingBox();
        for (const point of solution.answer) {
            const clickX = box.x + point.X;
            const clickY = box.y + point.Y;
            console.log(`Clicking at: (${clickX}, ${clickY})`);
            await page.mouse.click(clickX, clickY);
        }
    } else if (solution.metadata?.AnswerType === "Grid") {
        // CAPTCHA Grid (mảng true/false)
        const box = await captchaHandle.boundingBox();
        const gridItems = await page.$$('#captcha_grid div'); // thay bằng selector các phần tử lưới
        const answers = solution.answer;

        for (let i = 0; i < answers.length; i++) {
            if (answers[i] && gridItems[i]) {
                const itemBox = await gridItems[i].boundingBox();
                const clickX = itemBox.x + itemBox.width / 2;
                const clickY = itemBox.y + itemBox.height / 2;
                console.log(`Clicking grid item ${i} at: (${clickX}, ${clickY})`);
                await page.mouse.click(clickX, clickY);
            }
        }
    } else {
        console.warn("Unknown captcha solution type:", solution.metadata?.AnswerType);
    }

    // Nhấn nút xác nhận (nếu có)
    await page.click('#submit_button'); // thay bằng selector nút thực tế

    console.log("Captcha solved.");
}

solveComplexImageTaskPlaywright().catch(console.error);
  
Cách kết nối CAPTCHA hình ảnh vào website của bạn
Để hiểu rõ hoạt động CAPTCHA trên site, nắm được logic kiểm tra hoặc cấu hình lại, nên tham khảo phần này. Nó mô tả quá trình tích hợp bảo vệ chung — giúp bạn nhanh chóng nắm các chi tiết.

1. Tạo CAPTCHA trên máy chủ.

  • Tạo một hình ảnh CAPTCHA hoặc lưới hình ảnh.
  • Thêm nhiễu, méo và yếu tố ngẫu nhiên để bảo vệ khỏi bot.
  • Tạo captchaId duy nhất và lưu đáp án đúng (trong bộ nhớ, database hoặc cache).

2. Gửi CAPTCHA đến client

  • Server gửi captchaId và hình ảnh (base64 hoặc URL) cho client.
  • Client hiển thị CAPTCHA, ví dụ: <img> hoặc lưới <div> với hướng dẫn.
Ví dụ phía client (HTML + JS)Ví dụ phía client (HTML + JS)
arrow

3. Người dùng nhập câu trả lời

  • Người dùng nhập văn bản, nhấn vào hình ảnh hoặc xoay đối tượng.
  • Client tạo câu trả lời theo cấu trúc thích hợp:
    • CAPTCHA văn bản → chuỗi
    • lưới → mảng true/false
    • tọa độ → mảng {X, Y}

4. Gửi câu trả lời lên server:

  • Client gửi POST với captchaId và câu trả lời (answer).
  • Có thể gửi token phiên để tránh dùng lại.

5. Kiểm tra trên server

  • Server tìm phiên CAPTCHA theo captchaId.
  • So sánh câu trả lời của người dùng với đáp án đúng.
  • Trả về success: true/false.
  • Nếu thất bại, có thể tạo CAPTCHA mới.
Ví dụ phía serverVí dụ phía server
arrow

6. Hành động tiếp theo

  • CAPTCHA thành công → cho phép quy trình được bảo vệ (form, đăng ký, vv).
  • CAPTCHA thất bại → tạo CAPTCHA mới, giới hạn số lần thử.

Bổ sung

  • Sử dụng TTL (thời gian sống) cho phiên CAPTCHA, tự động hết hạn.
  • Cache hình ảnh và dùng URL tạm thời để tiết kiệm tài nguyên.
  • Đảm bảo click và touch trên thiết bị di động hoạt động chính xác.
  • Ghi log và phân tích để cải thiện trải nghiệm người dùng và bảo vệ khỏi bot.
Background
Các lỗi thường gặp và cách xử lý
Bug Icon
CAPTCHA hình ảnh không tải được
(Lưới trống, hình ảnh hỏng, lỗi 404/500, sự cố base64) — hãy kiểm tra rằng máy chủ tạo hình ảnh đúng cách, dữ liệu base64 không bị hỏng, định dạng hình ảnh được trình duyệt hỗ trợ và client nhận được captchaId hợp lệ.
Bug Icon
Nhấp chuột của người dùng không được xử lý
(Ô không được chọn hoặc phản hồi trống) — đảm bảo rằng tọa độ hoặc chỉ số nhấp chuột được gửi lên máy chủ, dữ liệu được tuần tự hóa đúng cách và các sự kiện chạm được hỗ trợ trên thiết bị di động.
Bug Icon
Captcha không vượt qua dù nhấp đúng
Kiểm tra rằng captcha không bị tạo lại trước khi xác minh, câu trả lời đúng được lưu riêng cho từng phiên, định dạng phản hồi đúng như mong đợi và TTL của captcha chưa hết hạn.
Bug Icon
CAPTCHA hết hạn
Nếu người dùng mất nhiều thời gian, tăng TTL, làm mới CAPTCHA khi thử lại và thông báo người dùng cần tải lại hình ảnh.
Kiểm tra độ bền vững của lớp bảo vệ
Sau khi tích hợp, hãy đảm bảo hệ thống thực sự chặn được những hành động tự động.
Khuyến nghị về bảo mật và tối ưu
Chỉ lưu đáp án đúng <b>trên server</b> (bộ nhớ, Redis hoặc DB), không gửi client.
Sử dụng captchaId duy nhất.
Giới hạn số lần thử CAPTCHA.
Luôn dùng <b>HTTPS</b> để truyền hình ảnh và click.
Cache hình ảnh và dùng <b>URL tạm</b> nếu có thể.
Ghi log lỗi tạo và xác thực (thời gian, IP/fingerprint, lý do từ chối).
Cập nhật định kỳ cơ chế CAPTCHA (bộ hình ảnh, kích thước/lưới, loại nhiệm vụ).
Kết luận

Nếu bạn gặp site có CAPTCHA hoặc hệ thống bảo vệ đã cài và không có quyền truy cập code — không sao! Xác định công nghệ tương đối dễ dàng. Để kiểm tra chính xác, dùng CapMonster Cloud trong môi trường thử nghiệm tách biệt để đảm bảo xử lý token và logic xác thực hoạt động đúng.

Với CAPTCHA hình ảnh — chỉ cần nhận dạng hệ thống, nghiên cứu hành vi và đảm bảo bảo vệ hoạt động. Bài viết hướng dẫn cách xác định CAPTCHA hình ảnh (ComplexImage) và cách tích hợp hoặc cấu hình lại, giúp bạn quản lý và kiểm soát bảo vệ.

Conclusion
Liên kết hữu ích
DocIconTài liệu CapMonster Cloud (ComplexImage)DocIconHướng dẫn tạo CAPTCHA riêng của bạnDocIconĐăng ký CapMonster Cloud