reCAPTCHA v2
và CapMonster Cloud

Giải captcha, tích hợp lên website và kiểm thử end-to-end.

Giá của giải pháp reCAPTCHA V2

CAPTCHA
Giá (USD)
$ 0.60
1000 token
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 reCAPTCHA V2, 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 reCAPTCHA V2 để 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ý.

Google reCAPTCHA v2 là gì
Google reCAPTCHA v2 là gì
reCAPTCHA v2 là hệ thống bảo vệ của Google nhằm chặn spam và các hành động tự động có thể gây hại cho website. Nó giúp phân biệt người dùng thật với bot, giữ cho trang web an toàn và ổn định.
Background
Ví dụ về reCAPTCHA V2
reCAPTCHA v2
reCAPTCHA v2
Captcha checkbox cổ điển nơi người dùng xác nhận mình là người thật. Đôi khi xuất hiện thêm cửa sổ với nhiệm vụ như chọn đúng hình ảnh.
reCAPTCHA v2 Invisible
reCAPTCHA v2 Invisible
Phiên bản vô hình xác thực hoàn toàn tự động, không cần người dùng tương tác hay nhấp vào ô.
reCAPTCHA v2 Enterprise
reCAPTCHA v2 Enterprise
Bản Enterprise với các tính năng kiểm soát và bảo mật bổ sung.

Cách giải reCAPTCHA v2 bằng CapMonster Cloud

Khi kiểm thử biểu mẫu chứa reCAPTCHA V2, bạn thường phải xác minh xem captcha đã tích hợp đúng và hoạt động ổn định chưa.

Bạn có thể tự kiểm tra captcha trên site.

  • Mở trang có form và đảm bảo captcha hiển thị.
  • Thử gửi form mà không giải captcha — máy chủ phải trả lỗi.
  • Sau khi giải thành công, form phải gửi đi trơn tru.

Để giải tự động có thể dùng CapMonster Cloud, dịch vụ nhận tham số captcha, xử lý trên máy chủ của họ và trả về token sẵn dùng. Chèn token này vào form để vượt qua kiểm tra mà không cần tương tác người dùng.

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
Giải reCAPTCHA v2 với thư viện sẵn có
CapMonster Cloud cung cấp SDK cho Python, JavaScript (Node.js) và C# giúp triển khai nhanh chóng.
Python
JavaScript
C#
Giải captcha, chèn token và gửi biểu mẫu
Ví dụ Node.js bao trùm toàn bộ chu trình xử lý trên trang của bạn. Có thể dùng HTTP để lấy HTML và tham số, gửi câu trả lời và xử lý kết quả; hoặc dùng công cụ tự động (ví dụ Playwright) để mở trang, chờ captcha, gửi tham số (đúng hoặc sai), nhận kết quả qua client CapMonster Cloud, chèn token vào form và xem kết quả.
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium


const { chromium } = require('playwright');
const { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request } = require('@zennolab_com/capmonstercloud-client');

(async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();

  const TARGET_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high';
  const WEBSITE_KEY = '6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd';
  const CMC_API_KEY = 'your_capmonster_cloud_api_key';

  const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CMC_API_KEY }));

  await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded' });

  // Quy trình giải captcha
  const solution = await cmc.Solve(new RecaptchaV2Request({ websiteURL: TARGET_URL, websiteKey: WEBSITE_KEY }));
  const token = solution.solution.gRecaptchaResponse;

  // Chèn token và gửi form (thay bằng selector bạn cần)
  await page.evaluate((t) => {
    const ta = document.querySelector('textarea#g-recaptcha-response');
    if (ta) ta.value = t;
    document.querySelector('form.formular')?.submit();
  }, token);

  console.log('Captcha đã được giải và form đã gửi!');
})();
Cách tích hợp reCAPTCHA v2 vào website
Để hiểu cách captcha vận hành, logic xác thực và cách cấu hình lại, hãy xem phần này. Toàn bộ quy trình thiết lập bảo vệ được mô tả chi tiết.

1. Truy cập trang bảng điều khiển quản trị reCAPTCHA.

2. Đăng ký website mới.

Chọn loại captcha — reCAPTCHA v2 (checkbox + thử thách hoặc phiên bản vô hình).

HowTo Connect image 1

3. Lấy hai khóa:

  • Site key — khóa công khai dùng ở front-end;
  • Secret key — khóa riêng dùng ở server để xác minh.

HowTo Connect image 2

Trong phần cài đặt bạn có thể khai báo domain được phép dùng reCAPTCHA hoặc mức độ bảo mật mong muốn.

4. Ví dụ mã ở phía client. Form HTML có reCAPTCHA v2 (có thể dán trực tiếp vào body trang):

Form HTML với reCAPTCHA v2Form HTML với reCAPTCHA v2
arrow

5. Xác minh phản hồi ở phía server.

Ví dụ PHPVí dụ PHP
arrow
Background
Các lỗi thường gặp và cách xử lý
Bug Icon
Sai site hoặc khóa
Captcha không tải hoặc trả về invalid-input-secret.
Bug Icon
Hết thời gian giải
Máy chủ không nhận được kết quả kịp thời. Hãy tăng thời gian chờ.
Bug Icon
Token rỗng
Có lỗi khi truyền kết quả lên trang.
Bug Icon
Response success=false
Token đã hết hạn, bị tái sử dụng hoặc bị giả mạo. Bật ghi log request và kiểm tra trường error-codes từ Google.
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 trữ <span class="font-bold">Secret Key</span> trên máy chủ, không truyền nó xuống phía client.
Ghi log các mã lỗi <span class="font-bold">(error-codes)</span> để hiểu vì sao một số lần kiểm tra không vượt qua.
Thêm các liên kết đến <span class="font-bold">Chính sách quyền riêng tư</span> và <span class="font-bold">Điều khoản sử dụng của Google</span> ở cuối biểu mẫu, như giấy phép yêu cầu.
Kết luận

Nếu bạn tiếp quản một trang web đã được cài sẵn captcha hoặc một hệ thống bảo vệ khác nhưng lại không có quyền truy cập vào mã nguồn thì cũng không có gì đáng lo! Việc xác định chính xác công nghệ nào đang được sử dụng khá đơn giản. Để kiểm tra xem mọi thứ có hoạt động đúng hay không, bạn có thể dùng dịch vụ nhận dạng CapMonster Cloud trong một môi trường thử nghiệm tách biệt nhằm đảm bảo cơ chế xử lý token và logic kiểm tra đang vận hành chính xác.

Với reCAPTCHA V2, bạn chỉ cần nhận diện hệ thống, quan sát hành vi của nó và xác nhận rằng lớp bảo vệ hoạt động đúng cách. Trong bài viết này, chúng tôi đã chỉ ra cách nhận biết reCAPTCHA V2 và nơi tìm hướng dẫn tích hợp hoặc cấu hình lại, giúp bạn tự tin duy trì lớp bảo vệ và kiểm soát hoạt động của nó.

Conclusion

Câu hỏi thường gặp về reCAPTCHA v2

Để gửi yêu cầu giải, thực hiện POST với JSON tới https://api.capmonster.cloud/createTask:

{
  "clientKey": "API_KEY",
  "task": {
    "type": "RecaptchaV2Task",
    "websiteURL": "[target_page_URL_with_reCAPTCHA]",
    "websiteKey": "[reCAPTCHA_website_key]"
  }
}
  • clientKey — khóa API từ tài khoản CapMonster Cloud của bạn
  • task.type: đặt là RecaptchaV2Task
  • task.websiteURL: URL trang nơi captcha xuất hiện
  • task.websiteKey: sitekey công khai được nhúng trong HTML trang

Để biết các bước tiếp theo, hãy đọc tài liệu giải reCAPTCHA.

Gửi tác vụ bằng yêu cầu tới https://api.capmonster.cloud/createTask với các tham số mô tả ở câu hỏi trước.

Poll https://api.capmonster.cloud/getTaskResult với clientKey và taskId (trả về trong phản hồi createTask).

Khi trường status là ready, phản hồi sẽ chứa chuỗi gRecaptchaResponse — đó là token đã giải của bạn.

Gửi token tới trang đích bằng một trong các phương pháp sau, tùy loại reCAPTCHA v2 và kiến trúc trang web:

  • Tiêm DOM tiêu chuẩn: với tích hợp checkbox thông thường, tiêm token vào vùng văn bản ẩn (ví dụ document.getElementById("g-recaptcha-response").innerHTML = token;) bằng page.evaluate() của Playwright (hoặc tương đương Puppeteer/Selenium). Sau đó gọi form.submit() theo chương trình hoặc kích hoạt nút gửi.
  • JavaScript Callback (reCAPTCHA vô hình): nếu trang dùng captcha vô hình với callback, xác định tên hàm trong thuộc tính data-callback và thực thi qua script tự động hóa, truyền token làm đối số (ví dụ onVerifyCallback("TOKEN_STRING")).
  • Yêu cầu HTTP trực tiếp: để bỏ qua render trình duyệt, chặn yêu cầu gửi form gốc của trang và gửi token trực tiếp tới backend như một phần dữ liệu form (ví dụ g-recaptcha-response=TOKEN_STRING) qua HTTP client.

Máy chủ đích trích token từ lần gửi của bạn và xác minh qua endpoint siteverify của Google.

CapMonster Cloud xử lý cả hai chế độ bằng cùng một lời gọi API. Với chế độ vô hình, thêm tham số isInvisible: true vào yêu cầu createTask. Để xác nhận đúng giải pháp reCAPTCHA, xác định phương thức trang web dùng để gửi token. Các phương thức này được mô tả ở câu hỏi trước.

Nguyên nhân phổ biến nhất là token đã được dùng hoặc hết hạn — token reCAPTCHA v2 chỉ dùng một lần và sống ngắn, nên mọi trễ hoặc gửi trùng sẽ gây lỗi. Bắt đầu bằng cách ghi log phản hồi HTTP thô từ https://www.google.com/recaptcha/api/siteverify — mảng error-codes trong phản hồi đó là tín hiệu chẩn đoán chính.

Hai nguyên nhân khác: invalid-input-secret nghĩa là secret key sai được truyền ở backend, còn trường g-recaptcha-response trống trên máy chủ thường cho thấy bước tiêm token ở frontend thất bại im lặng trước khi gửi form.

Cũng hãy kiểm tra websiteURL bạn truyền cho CapMonster Cloud khớp chính xác origin nơi Google xác minh token — không khớp sẽ gây lỗi ràng buộc miền.

Cho người dùng không chuyên kỹ thuật: dùng tiện ích trình duyệt CapMonster Cloud (Chrome/Firefox). Cho phép thử hành vi captcha trực tiếp trên trang và theo dõi quá trình giải theo thời gian thực. Cài tiện ích, thêm khóa API và mở trang được bảo vệ bởi reCAPTCHA.

Cho QA và DevOps: thực hiện bài kiểm tra ba bước đơn giản:

  1. Gửi form mà không giải captcha — phải trả về success: false.
  2. Gửi form với captcha đã giải — yêu cầu phải thành công.
  3. Chạy kiểm tra tải (k6 hoặc JMeter, 100+ RPS) và xác minh token hết hạn hoặc tái sử dụng bị từ chối đúng (ví dụ HTTP 403).

Quan trọng: siteverify luôn trả về HTTP 200 — lỗi được xác định bởi trường success, không phải mã trạng thái HTTP.