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 Amazon AWS WAF, 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 Amazon AWS WAF để 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ý.
AWS WAF (Amazon Web Services Web Application Firewall) — là tường lửa ứng dụng web đám mây của Amazon, giúp bảo vệ các trang web, API và ứng dụng web khỏi các cuộc tấn công và lưu lượng truy cập độc hại. Nói một cách đơn giản, đây là một bộ lọc đứng trước trang web hoặc API của bạn và quyết định lưu lượng truy cập nào của khách truy cập được phép đi qua và lưu lượng nào bị chặn.
Nếu Challenge/CAPTCHA được bật trên trang web, khách truy cập có thể thấy một trang xác minh riêng biệt. Họ sẽ được yêu cầu thực hiện một tác vụ, ví dụ: chọn tất cả hình ảnh từ một danh mục, để xác nhận rằng họ không phải là bot.
Khi kiểm tra các tài nguyên được bảo vệ bởi AWS WAF, điều quan trọng là phải đảm bảo rằng lớp bảo vệ hoạt động chính xác và được tích hợp đúng cách.
Bạn có thể kiểm tra thủ công hoạt động của lớp bảo vệ:
Sau khi vượt qua kiểm tra thành công, AWS WAF sẽ thiết lập cookie xác nhận rằng người dùng hoặc máy khách đã vượt qua kiểm tra và lưu lượng truy cập tin cậy được cho phép.
Để nhận dạng captcha tự động, bạn có thể sử dụng các dịch vụ chuyên dụng, ví dụ: CapMonster Cloud — một công cụ nhận các tham số captcha, xử lý chúng trên máy chủ của mình và trả về cookie hoặc token đã sẵn sàng. Chúng có thể được chèn vào trình duyệt để vượt qua kiểm tra mà không cần sự tham gia của người dùng.
Làm việc với CapMonster Cloud qua API thường gồm các bước:
Trong yêu cầu giải quyết AWS WAF, cần chỉ định các tham số sau:
type - AmazonTask;
websiteURL - địa chỉ trang chính nơi giải captcha;
challengeScript - liên kết đến challenge.js;
Các tham số sau được lấy từ window.gokuProps (tất cả đều có kiểu chuỗi):
captchaScript - liên kết đến captcha.js (có thể không có nếu bạn chỉ có Challenge);
cookieSolution - mặc định là false — trong phản hồi bạn sẽ nhận được "captcha_voucher" và "existing_token". Nếu bạn cần cookie "aws-waf-token", hãy chỉ định true.;
userAgent - User-Agent của trình duyệt. Chỉ truyền UA hiện tại từ hệ điều hành Windows;
Ngoài ra, đối với tác vụ này, việc sử dụng proxy của bạn là bắt buộc:
proxyType :
proxyAddress - Địa chỉ IP proxy IPv4/IPv6;
proxyPort - cổng proxy;
proxyLogin - tên đăng nhập máy chủ proxy;
proxyPassword - mật khẩu máy chủ proxy.
https://api.capmonster.cloud/createTask{
"clientKey": "API_KEY",
"task": {
"type": "AmazonTask",
"websiteURL": "https://example.com/index.html",
"websiteKey": "h15hX7brbaRTR...Za1_1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
"captchaScript": "https://234324vgvc23.yejk.captcha-sdk.awswaf.com/234324vgvc23/jsapi.js",
"cookieSolution": true,
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"cookies": {
"aws-waf-token": "10115f5b-ebd8-45c7-851e-cfd4f6a82e3e:EAoAua1QezAhAAAA:dp7sp2rXIRcnJcmpWOC1vIu+yq/A3EbR6b6K7c67P49usNF1f1bt/Af5pNcZ7TKZlW+jIZ7QfNs8zjjqiu8C9XQq50Pmv2DxUlyFtfPZkGwk0d27Ocznk18/IOOa49Rydx+/XkGA7xoGLNaUelzNX34PlyXjoOtL0rzYBxMAQy0D1tn+Q5u97kJBjs5Mytqu9tXPIPCTSn4dfXv5llSkv9pxBEnnhwz6HEdmdJMdfur+YRW1MgCX7i3L2Y0/CNL8kd8CEhTMzwyoXekrzBM="
},
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36"
}
}Dữ liệu nhận được từ CapMonster Cloud (cookie AWS WAF hợp lệ) có thể được chèn vào ngữ cảnh trình duyệt hoặc ứng dụng khách HTTP. Sau đó, trang web coi yêu cầu là đã được xác minh và cho phép tiếp tục công việc mà không cần kiểm tra thêm hoặc các trang challenge.
Để tự động hóa và kiểm tra, rất thuận tiện khi sử dụng Puppeteer, Selenium hoặc Playwright — chúng cho phép:
Bằng cách này, bạn có thể kiểm tra tính chính xác của hoạt động bảo vệ và đảm bảo rằng trang web chấp nhận và xử lý đúng các cookie AWS WAF hợp lệ.
Quan trọng: các ví dụ mã này sử dụng cookieSolution=False. Nếu kết quả bạn cần nhận cookie, hãy đặt cookieSolution=True.
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium
import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, AmazonRequest } from "@zennolab_com/capmonstercloud-client";
const API_KEY = "YOUR_API_KEY";
const CAPTCHA_URL = "https://example.com";
// Cài đặt proxy
const PROXY = {
proxyType: "http",
proxyAddress: "PROXY_HOST",
proxyPort: 1234,
proxyLogin: "PROXY_USER",
proxyPassword: "PROXY_PASS"
};
(async () => {
// 1) Mở trang qua proxy và thu thập các tham số AWS WAF
const browser = await chromium.launch({
headless: false,
proxy: {
server: `http://${PROXY.proxyAddress}:${PROXY.proxyPort}`,
username: PROXY.proxyLogin,
password: PROXY.proxyPassword
}
});
const page = await browser.newPage();
await page.goto(CAPTCHA_URL, { waitUntil: "networkidle" });
// đợi tải các tập lệnh challenge và captcha
await page.waitForFunction(() => {
const scripts = Array.from(document.querySelectorAll("script")).map(s => s.src || "");
return scripts.some(src => src.includes("challenge")) && scripts.some(src => src.includes("captcha"));
});
// trích xuất các tham số AWS WAF (khóa, context, iv, liên kết đến tập lệnh)
const params = await page.evaluate(() => {
const gokuProps = window.gokuProps || {};
const scripts = Array.from(document.querySelectorAll("script")).map(s => s.src || "");
return {
websiteKey: gokuProps.key || null,
context: gokuProps.context || null,
iv: gokuProps.iv || null,
challengeScript: scripts.find(src => src.includes("challenge")),
captchaScript: scripts.find(src => src.includes("captcha"))
};
});
await browser.close();
// 2) Giải quyết AWS WAF thông qua CapMonster Cloud
const client = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
const req = new AmazonRequest({
websiteURL: CAPTCHA_URL,
websiteKey: params.websiteKey,
challengeScript: params.challengeScript,
captchaScript: params.captchaScript,
context: params.context,
iv: params.iv,
cookieSolution: true,
proxy: PROXY
});
const solved = await client.Solve(req);
const wafToken = solved.solution.cookies["aws-waf-token"];
// 3) Chèn aws-waf-token và xóa các token cũ
const browser2 = await chromium.launch({
headless: false,
proxy: {
server: `http://${PROXY.proxyAddress}:${PROXY.proxyPort}`,
username: PROXY.proxyLogin,
password: PROXY.proxyPassword
}
});
const context2 = await browser2.newContext();
// xóa các aws-waf-token cũ cho tên miền của bạn
const existingCookies = await context2.cookies();
const filteredCookies = existingCookies.filter(c => !(c.name === "aws-waf-token" && c.domain.endsWith(".your-domain")));
await context2.clearCookies();
await context2.addCookies(filteredCookies);
// thiết lập aws-waf-token mới
await context2.addCookies([{
name: "aws-waf-token",
value: wafToken,
domain: ".your-domain",
path: "/",
httpOnly: false,
secure: true
}]);
const page2 = await context2.newPage();
const response = await page2.goto(CAPTCHA_URL, { waitUntil: "networkidle" });
console.log("Final page status:", response.status());
console.log("Final page URL:", page2.url());
await browser2.close();
})();
AWS WAF không thể được cài đặt trực tiếp trên một trang web. Nó chỉ hoạt động thông qua các tài nguyên AWS:
Bước 1. Tạo tài khoản AWS (nếu chưa có)
Truy cập: https://portal.aws.amazon.com/billing/signup. Tạo tài khoản > xác nhận email và số điện thoại.
Bước 2. Bạn có thể sử dụng giao diện tiêu chuẩn hoặc giao diện mới của AWS WAF:
Bước 3. Tạo gói bảo vệ (Web ACL)
Đây là tập hợp các quy tắc bảo vệ cho tài nguyên của bạn.
Bước 4. Cấu hình danh mục ứng dụng:
Trong khối Tell us about your app:
Các tham số này cần thiết để AWS đề xuất các quy tắc tối ưu.
Bước 5. Chọn tài nguyên sẽ được bảo vệ
Nếu trang web của bạn trên CloudFront > chọn CloudFront distributions
Nếu backend của bạn trên ALB > chọn Regional resourcesNếu API > chọn API Gateway REST APIĐánh dấu vào tài nguyên cần thiết > nhấp vào Add.
Bước 6. Chọn bộ quy tắc khởi đầu.
AWS sẽ đề xuất:
Recommended for you — tùy chọn tốt nhất cho người mới bắt đầu
Nó bao gồm:Nhấp vào Next.
Bước 7. Cấu hình (tùy chọn)
Trên màn hình Customize protection pack (web ACL):
Tham số chính:
Ghi nhật ký (Logging)
Chọn nơi ghi nhật ký:
(khuyên dùng S3 + Athena).
Bước 8. Tạo Web ACL
Nhấp vào: Add protection pack (web ACL)
AWS sẽ tạo các quy tắc và liên kết chúng với tài nguyên của bạn.
Kiểm tra
Để đảm bảo rằng lớp bảo vệ đang hoạt động:
Trong bất kỳ quy tắc nào > Action > CAPTCHA / Challenge
Điều này làm giảm lưu lượng truy cập bot và bảo vệ các trang đăng nhập và biểu mẫu.
Trong phần Rule groups, bạn có thể thêm:
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 Amazon AWS WAF, 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 Amazon AWS WAF 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ó.