logo
bars

Amazon AWS WAF
và CapMonster Cloud

Giải captcha, cài đặt trên trang web 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 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 của Amazon là gì
AWS WAF của Amazon là gì

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.

Cách giải quyết AWS WAF thông qua CapMonster Cloud

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ệ:

  • Mở trang có biểu mẫu hoặc tài nguyên và đảm bảo rằng AWS WAF phản hồi chính xác các yêu cầu.
  • Thử thực hiện các hành động có thể bị WAF hạn chế (ví dụ: yêu cầu hàng loạt, tiêu đề đáng ngờ) — máy chủ sẽ chặn các yêu cầu đó hoặc trả về lỗi.

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:

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
Thay thế cookie aws-waf-token trên trangThay thế cookie aws-waf-token trên trang
arrow
Nhận dạng Amazon AWS WAF sử dụng các thư viện có sẵn
Dịch vụ CapMonster Cloud cung cấp các thư viện sẵn có để làm việc thuận tiện bằng các ngôn ngữ Python, JavaScript (Node.js)C#.

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.

Python
JavaScript
C#
Giải quyết, lấy tham số và thiết lập cookie
Ví dụ trên Node.js cho chu trình nhận dạng captcha đầy đủ trên trang web của bạn. Các cách tiếp cận có thể: sử dụng yêu cầu HTTP để lấy HTML và các tham số của hệ thống bảo vệ, gửi phản hồi và xử lý kết quả. Hoặc sử dụng các công cụ tự động hóa (ví dụ: Playwright) — mở trang, đợi kiểm tra, gửi tham số qua ứng dụng khách CapMonster Cloud, nhận kết quả, chèn cookie vào trình duyệt (để kiểm tra, bạn có thể sử dụng cả dữ liệu đúng và sai) và xem kết quả.
// 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();
})();
Cách kết nối AWS WAF với trang web của bạn
Để tự tin điều hướng hoạt động của captcha trên trang web của bạn, hiểu logic kiểm tra của nó, kết nối lại hoặc cấu hình lại, chúng tôi khuyên bạn nên nghiên cứu phần này. Nó mô tả quy trình kết nối bảo vệ — điều này sẽ giúp bạn nhanh chóng hiểu rõ tất cả các sắc thái.

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:

  • Amazon CloudFront (tùy chọn chính và tốt nhất) — CDN mà qua đó bất kỳ trang web nào cũng có thể được bảo vệ. Hoạt động nhanh, toàn cầu và phù hợp với hầu hết mọi trường hợp.
  • Application Load Balancer (ALB) — được sử dụng cho các trang web phía máy chủ, API và container bên trong AWS. Nếu backend của bạn chạy trong EC2, ECS, EKS — hãy đặt WAF trên ALB.
  • API Gateway — bảo vệ API REST và WebSocket. Phù hợp cho SPA, ứng dụng di động và microservices.
  • AWS AppSync (GraphQL API)
  • Amazon Cognito (đăng nhập/đăng ký)
  • AWS App Runner (ứng dụng container)
  • AWS Amplify Hosting (lưu trữ frontend)
  • AWS Verified Access (truy cập vào các ứng dụng nội bộ)

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:

  1. Truy cập bảng điều khiển AWS
  2. Mở AWS WAF. Trong menu bên trái, nhấp vào Try the new experience (nếu được đề xuất).

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.

  1. Trong menu bên trái, chọn: Resources & protection packs (Web ACLs)
  2. Nhấp vào Add protection pack (web ACL).

Bước 4. Cấu hình danh mục ứng dụng:

Trong khối Tell us about your app:

  • App category — chọn Web / API / Both
  • Traffic source — lưu lượng truy cập đến từ đâu (web, API hoặc cả hai)

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ệ

  1. Nhấp vào Add resources
  2. Chọn những gì bạn đang kết nối:

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 resources
Nế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:

  • bảo vệ cơ bản
  • quy tắc chống SQLi và XSS
  • IP reputation lists (danh sách danh tiếng IP)
  • Bot Control (tùy chọn)
  • quy tắc cho web/API

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:

  • Default action:
    • Allow all except blocked — thường chọn tùy chọn này
    • Block all except allowed — nếu trang web bị đóng
  • Default rate limits: Giới hạn số lượng yêu cầu (giảm thiểu DDoS L7)
  • IP addresses: Danh sách trắng/đen
  • Country specific origins: Hạn chế lưu lượng truy cập theo quốc gia

Ghi nhật ký (Logging)

Chọn nơi ghi nhật ký:

  • CloudWatch
  • S3
  • Firehose

(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:

  1. Mở WAF > chọn web ACL của bạn
  2. Chuyển đến Monitoring
  3. Xem:
    • biểu đồ lưu lượng truy cập
    • các yêu cầu bị chặn
    • yêu cầu mẫu (sample requests)

Bổ sung (tùy chọn)

  • Bật CAPTCHA hoặc Challenge

    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.

  • Thêm Managed Rule Groups

    Trong phần Rule groups, bạn có thể thêm:

    • AWS Managed
    • Bot Control
    • Account takeover prevention
    • Marketplace rules (F5, Imperva, Fortinet)
  • Liên kết với Shield Advanced. Để bảo vệ chống lại DDoS (L3–L7).

Background
Các lỗi thường gặp và cách xử lý
Bug Icon
Tên miền hoặc quy tắc không hợp lệ — Challenge không hiển thị
Kiểm tra xem AWS WAF WebACL có được liên kết với đúng tên miền (CloudFront Distribution / ALB / API Gateway), đúng đường dẫn và không có xung đột giữa các quy tắc hay không.
Bug Icon
Hết thời gian tải trang hoặc kiểm tra
Đôi khi trình duyệt hoặc tập lệnh không đợi phản hồi từ AWS WAF. Tăng thời gian chờ (timeout) trong các bài kiểm tra và đảm bảo rằng backend xử lý các yêu cầu mà không bị trễ.
Bug Icon
Cookie AWS WAF hết hạn
Các _aws_waf_token_… lỗi thời hoặc các thẻ cookie liên quan dẫn đến Challenge lặp lại hoặc bị chặn tạm thời.
Bug Icon
Quy tắc quá nhạy cảm
Các chữ ký Bot Control, quy tắc CAPTCHA hoặc quy tắc dựa trên tỷ lệ (Rate-based) quá nghiêm ngặt có thể chặn người dùng thực.
Bug Icon
Cấu hình WebACL không chính xác
Lỗi trong thứ tự quy tắc, mức độ ưu tiên hoặc điều kiện có thể dẫn đến dương tính giả và bị chặn.
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
Cấu hình WebACL theo mức độ rủi ro. Sử dụng Managed Rules (AWS, AWS Marketplace), AWS Bot Control và các quy tắc tùy chỉnh dựa trên danh tiếng IP, tiêu đề, giới hạn tỷ lệ và các điều kiện khác.
Ghi log các sự kiện WAF. Bật <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> để phân tích dương tính giả và tối ưu hóa quy tắc.
Thêm liên kết đến <b>Chính sách quyền riêng tư</b> và <b>Điều khoản sử dụng</b>. Điều này quan trọng đối với tính minh bạch và tuân thủ các yêu cầu bảo mật cũng như kỳ vọng của người dùng.
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 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ó.

Conclusion
Liên kết hữu ích
DocIconTài liệu AWS WAFDocIconTài liệu CapMonster Cloud (làm việc với AWS WAF)DocIconTổng quan về bảo vệ tài nguyên web bằng AWS WAF