CAPSOLVER
Blog
Làm thế nào để giải AWS Captcha / Khó khăn bằng PHP

Cách giải AWS Captcha / Thách thức bằng PHP: Hướng dẫn toàn diện

Logo of CapSolver

Anh Tuan

Data Science Expert

10-Dec-2025

Tóm tắt (Quá dài; Không đọc)

Hướng dẫn này cung cấp một hướng dẫn chi tiết từng bước về cách vượt qua CAPTCHA và trang thử thách của AWS WAF bằng PHP và API CapSolver. Chúng tôi mô tả logic để phát hiện cả CAPTCHA (HTTP 405) và Thử thách (HTTP 202), trích xuất các tham số cần thiết và sử dụng cookie aws-waf-token để truy cập tài nguyên được bảo vệ.

Giới thiệu

Chào mừng bạn đến với hướng dẫn toàn diện này, nơi chúng ta sẽ khám phá thế giới của AWS CAPTCHA và cách triển khai trình giải CAPTCHA bằng PHP. Đối với các nhà phát triển và người quét web, việc gặp phải CAPTCHA có thể là một rào cản lớn, nhưng với các công cụ đúng đắn, nó trở thành một nhiệm vụ có thể quản lý được.

AWS WAF CAPTCHA và Thử thách là gì?

AWS WAF (Web Application Firewall) là một dịch vụ bảo mật giúp bảo vệ các ứng dụng web khỏi các cuộc tấn công phổ biến. Nó cung cấp hai hành động chính để xác minh rằng yêu cầu đến từ người dùng hợp lệ thay vì bot: CAPTCHAThử thách.

Tổng quan về các hành động của AWS WAF

Hành động Mục đích Mã trạng thái HTTP Giải pháp cần thiết
Thử thách Chạy kiểm tra nền để xác minh phiên bản khách hàng là trình duyệt tiêu chuẩn. 202 Accepted Yêu cầu giải một thử thách JavaScript để nhận token.
CAPTCHA Yêu cầu người dùng cuối giải một trò chơi hình ảnh để chứng minh họ là người thật. 405 Method Not Allowed Yêu cầu giải CAPTCHA hình ảnh, bao gồm việc trích xuất các tham số cụ thể từ trang.

Sau khi CAPTCHA hoặc Thử thách được giải thành công, AWS WAF sẽ cấp một token hợp lệ, được trả về dưới dạng giá trị của cookie tên là aws-waf-token. Cookie này phải được bao gồm trong các yêu cầu tiếp theo để vượt qua bảo vệ WAF.

🔎 Giải quyết AWS Captcha / Thử thách bằng PHP và CapSolver

CapSolver cung cấp giải pháp API mạnh mẽ để xử lý cả Thử thách nền và CAPTCHA hình ảnh do AWS WAF đưa ra. Hướng dẫn này tập trung vào việc sử dụng thư viện cURL của PHP để triển khai logic cần thiết.

📕 Yêu cầu

  • PHP (với phần mở rộng cURL được kích hoạt)
  • cURL
  • Mã API CapSolver (Bạn có thể nhận được bằng cách đăng ký tại CapSolver)

🛠️ Bước 1: Thiết lập môi trường và hàm trợ giúp

Nội dung chính của giải pháp của chúng tôi bao gồm hai cuộc gọi API chính đến CapSolver: createTask để gửi CAPTCHA/Thử thách và getTaskResult để nhận kết quả.

PHP Copy
<?php

// --- Cấu hình ---
$PROXY = "http://username:password@host:port"; // TÙY CHỌN: Thay thế bằng thông tin proxy của bạn (ví dụ, cho AntiAwsWafTask)
$PAGE_URL = "https://norway-meetup.aws.wslab.no/";  // Thay thế bằng URL đích được bảo vệ bởi AWS WAF
$CLIENT_KEY = "YourPayPerUsage";  // Thay thế bằng khóa API CAPSOLVER của bạn

/**
 * Gửi một nhiệm vụ đến API CapSolver.
 * @param array $payload Thông tin nhiệm vụ chứa loại và tham số.
 * @return array Trả về phản hồi API, bao gồm taskId.
 */
function createTask($payload) {
    global $CLIENT_KEY;
    $ch = curl_init();
    echo("Tạo nhiệm vụ...\n");
    curl_setopt($ch, CURLOPT_URL, 'https://api.capsolver.com/createTask');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['clientKey' => $CLIENT_KEY, 'task' => $payload]));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}

/**
 * Kiểm tra định kỳ API CapSolver để nhận kết quả nhiệm vụ.
 * @param string $taskId ID của nhiệm vụ cần kiểm tra.
 * @return array Trả về phản hồi API chứa giải pháp.
 */
function getTaskResult($taskId) {
    global $CLIENT_KEY;
    do {
        echo("Đợi giải pháp...\n");
        sleep(1);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://api.capsolver.com/getTaskResult');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['clientKey' => $CLIENT_KEY, 'taskId' => $taskId]));
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        $response = curl_exec($ch);
        curl_close($ch);
        $data = json_decode($response, true);
        
        if (isset($data['status']) && $data['status'] == "ready") {
            return $data;
        }
        
        // Xử lý lỗi tiềm ẩn từ getTaskResult
        if (isset($data['errorId']) && $data['errorId'] != 0) {
            echo("Lỗi nhận kết quả nhiệm vụ: " . $data['errorDescription'] . "\n");
            return null;
        }
        
    } while(true);
}

/**
 * Giải AWS WAF Thử thách hoặc CAPTCHA bằng loại nhiệm vụ phù hợp.
 * @param string $taskType Loại nhiệm vụ CapSolver (AntiAwsWafTask hoặc AwsCaptchaTask).
 * @param array $params Các tham số cần thiết cho nhiệm vụ.
 * @return string|null Giá trị cookie aws-waf-token hoặc null nếu thất bại.
 */
function solveAwsWaf($taskType, $params) {
    global $PAGE_URL, $PROXY;
    
    $payload = [
        'type' => $taskType,
        'websiteURL' => $PAGE_URL,
        'proxy' => $PROXY,
    ];
    
    // Gộp các tham số cụ thể cho nhiệm vụ
    $payload = array_merge($payload, $params);
    
    // Làm sạch các giá trị trống để có yêu cầu sạch hơn
    $payload = array_filter($payload, function($value) {
        return $value !== "" && $value !== null;
    });

    $taskData = createTask($payload);
    
    if (isset($taskData['taskId'])) {
        $result = getTaskResult($taskData['taskId']);
        if ($result && isset($result['solution']['cookie'])) {
            return $result['solution']['cookie'];
        }
    }
    
    return null;
}

⚡ Bước 2: Triển khai logic phát hiện và giải WAF

Logic chính bao gồm việc gửi yêu cầu ban đầu đến trang được bảo vệ và kiểm tra mã trạng thái HTTP để xác định xem có cần Thử thách (202) hay CAPTCHA (405) hay không. Sau đó, chúng tôi sử dụng biểu thức chính quy để trích xuất các tham số cần thiết từ nội dung phản hồi HTML.

PHP Copy
// --- Logic Thực thi Chính ---

// 1. Yêu cầu ban đầu đến trang được bảo vệ
$ch = curl_init($PAGE_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$cookie = null;

echo("Mã HTTP ban đầu: " . $httpCode . "\n");

if ($httpCode == 202) {
    // --- Xử lý Thử thách (202) ---
    echo("Phát hiện Thử thách (HTTP 202). Trích xuất tham số...\n");
    
    // Trích xuất URL challenge.js
    preg_match('/<script src="([^"]*token.awswaf.com[^"]*)"/', $response, $matches);
    $awsChallengeJS = $matches[1] ?? null;
    
    if ($awsChallengeJS) {
        $params = ['awsChallengeJS' => $awsChallengeJS];
        $cookie = solveAwsWaf("AntiAwsWafTask", $params);
    } else {
        echo("Lỗi: awsChallengeJS không được tìm thấy cho Thử thách.\n");
    }

} elseif ($httpCode == 405) {
    // --- Xử lý CAPTCHA (405) ---
    echo("Phát hiện CAPTCHA (HTTP 405). Trích xuất tham số...\n");
    
    // Trích xuất tham số từ nội dung trang
    preg_match('/<script src="([^"]*token.awswaf.com[^"]*)"/', $response, $matches);
    $awsChallengeJS = $matches[1] ?? null;
    
    preg_match('/"key":"(.*?)"/', $response, $matches);
    $awsKey = $matches[1] ?? null;
    
    preg_match('/"iv":"(.*?)"/', $response, $matches);
    $awsIv = $matches[1] ?? null;
    
    preg_match('/"context":"(.*?)"/', $response, $matches);
    $awsContext = $matches[1] ?? null;
    
    if ($awsKey && $awsIv && $awsContext) {
        $params = [
            'awsKey' => $awsKey,
            'awsIv' => $awsIv,
            'awsContext' => $awsContext,
            'awsChallengeJS' => $awsChallengeJS // Tùy chọn nhưng được khuyến khích
        ];
        // Lưu ý: Loại nhiệm vụ cho CAPTCHA hình ảnh thường vẫn là AntiAwsWafTask, 
        // nhưng các tham số được truyền sẽ xác định loại giải pháp trên phía CapSolver.
        $cookie = solveAwsWaf("AntiAwsWafTask", $params); 
    } else {
        echo("Lỗi: Các tham số key, IV hoặc context không được tìm thấy cho CAPTCHA.\n");
    }
}

// 3. Sử dụng token để truy cập tài nguyên được bảo vệ
if ($cookie) {
    echo("Đã nhận được aws-waf-token thành công. Gửi yêu cầu cuối cùng...\n");
    
    $ch = curl_init($PAGE_URL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // Thiết lập cookie aws-waf-token
    curl_setopt($ch, CURLOPT_COOKIE, "aws-waf-token=" . $cookie);
    
    $finalResponse = curl_exec($ch);
    curl_close($ch);
    
    echo "\n--- Nội dung Trang Cuối ---\n";
    echo $finalResponse;
    echo "\n--------------------------\n";
} else {
    echo("Không thể giải quyết Thử thách/CAPTCHA của AWS WAF.\n");
}

?>

Ghi chú Tối ưu Mã

Mã gốc sử dụng các hàm riêng biệt (solveAwsChallenge, solveAwsCaptcha) và tên tham số không nhất quán ( key, iv, context so với awsKey, awsIv, awsContext). Mã tối ưu hóa đã đơn giản hóa thành một hàm solveAwsWaf, đảm bảo nhất quán với tài liệu API CapSolver mới nhất về việc giải AWS WAF. Cách tiếp cận này có tính modular cao và dễ bảo trì.

Logic này rất hiệu quả cho các nhiệm vụ quét web và tự động hóa. Đối với những người làm việc bằng ngôn ngữ khác, CapSolver cũng cung cấp các hướng dẫn như "Cách giải AWS Captcha / Thử thách bằng Python" [https://www.capsolver.com/blog/how-to-solve-aws-captcha-challenge-with-python] tuân theo mô hình API tương tự.

Kết luận

Các cơ chế Thử thách và CAPTCHA của AWS WAF là các biện pháp chống bot hiệu quả, nhưng chúng không phải là không thể vượt qua. Bằng cách triển khai logic phát hiện và giải quyết mạnh mẽ trong PHP, tận dụng sức mạnh của API CapSolver, các nhà phát triển có thể đáng tin cậy nhận được aws-waf-token cần thiết để tiếp tục các nhiệm vụ quét web hoặc tự động hóa mà không bị gián đoạn. Chìa khóa nằm ở việc xác định chính xác hành động WAF thông qua mã trạng thái HTTP và trích xuất chính xác các tham số cần thiết từ nguồn trang.

Những điểm chính

  • Hành động của AWS WAF: AWS WAF sử dụng Thử thách thầm lặng (HTTP 202) hoặc CAPTCHA hình ảnh (HTTP 405) để chặn bot.
  • Mục tiêu: Mục tiêu cuối cùng là nhận được giá trị cookie aws-waf-token.
  • API CapSolver: Loại nhiệm vụ AntiAwsWafTask xử lý cả việc giải Thử thách và CAPTCHA, với các tham số cần thiết xác định giải pháp cụ thể.
  • Triển khai PHP: PHP sử dụng cURL cho các yêu cầu, và preg_match là thiết yếu để trích xuất các tham số động như awsChallengeJS, awsKey, awsIvawsContext từ nguồn HTML.
  • Tính tin cậy: Đối với tự động hóa ổn định, khối lượng lớn, việc tích hợp trình giải chuyên dụng như CapSolver là cần thiết, như được chi tiết trong các tài nguyên như AWS WAF CAPTCHA Solver: Token & Image Solution for Scraper

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

Câu hỏi 1: Tại sao tôi cần kiểm tra mã trạng thái HTTP (202 hoặc 405)?

Trả lời: Mã trạng thái HTTP là chỉ báo đáng tin cậy nhất về loại hành động WAF cần thiết. Mã trạng thái 202 Accepted cho biết thử thách đang hoạt động, yêu cầu ít tham số hơn. Mã trạng thái 405 Method Not Allowed cho biết CAPTCHA hình ảnh đang hoạt động, yêu cầu các tham số cụ thể hơn (key, iv, context) được trích xuất từ các biến JavaScript trên trang.

Câu hỏi 2: Sự khác biệt giữa AntiAwsWafTaskAntiAwsWafTaskProxyLess là gì?

Trả lời: Cả hai loại nhiệm vụ đều được thiết kế để giải các thử thách AWS WAF. Sự khác biệt chính là yêu cầu proxy. AntiAwsWafTask yêu cầu bạn cung cấp proxy riêng trong payload yêu cầu. AntiAwsWafTaskProxyLess không yêu cầu proxy, vì CapSolver xử lý việc sử dụng proxy bên trong. Sử dụng proxy thường được khuyến khích cho quét web quy mô lớn để duy trì tính ẩn danh và tránh bị cấm IP.

Câu hỏi 3: Script của tôi không thể tìm thấy các tham số key, iv hoặc context. Tôi nên làm gì?

Trả lời: Các tham số này được tạo động và nhúng trong nguồn HTML, thường nằm trong thẻ <script> hoặc trường ẩn. Nếu preg_match thất bại, có thể do thay đổi trong triển khai WAF của trang đích. Bạn nên kiểm tra nguồn HTML mới nhất của trang bị chặn để cập nhật biểu thức chính quy.

Câu hỏi 4: Tôi có thể giải AWS WAF mà không sử dụng dịch vụ bên thứ ba không?

Trả lời: Giải các thử thách AWS WAF một cách thủ công là rất khó và không thực tế cho tự động hóa. Hành động Thử thách yêu cầu thực thi JavaScript phức tạp, và hành động CAPTCHA yêu cầu giải các bài toán nhận diện hình ảnh. Các dịch vụ bên thứ ba như CapSolver sử dụng AI tiên tiến và cơ sở hạ tầng quy mô lớn để giải các thử thách này theo thời gian thực, làm cho tự động hóa khả thi. Việc xây dựng trình giải nội bộ cho mọi loại CAPTCHA thường không hiệu quả về chi phí hoặc đáng tin cậy.

Câu hỏi 5: Token aws-waf-token có hiệu lực trong bao lâu?

Trả lời: Thời gian hiệu lực của token aws-waf-token được xác định bởi cấu hình AWS WAF của trang được bảo vệ, nhưng thường là khoảng 10-30 phút. Khi token hết hạn, bạn sẽ cần lặp lại quy trình giải (yêu cầu ban đầu, phát hiện và gửi nhiệm vụ) để nhận token mới.

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Cách giải Captcha / Thách thức của AWS bằng PHP
Cách giải AWS Captcha / Thách thức bằng PHP: Hướng dẫn toàn diện

Một hướng dẫn chi tiết bằng PHP để giải quyết CAPTCHA và thách thức của AWS WAF cho trích xuất dữ liệu và tự động hóa đáng tin cậy

AWS WAF
Logo of CapSolver

Anh Tuan

10-Dec-2025

Cách giải quyết bài kiểm tra Captcha / Thách thức của AWS bằng Python
Cách giải Captcha / Thách thức AWS bằng Python

Một hướng dẫn thực tế về việc xử lý các thách thức của AWS WAF bằng Python và CapSolver, cho phép truy cập mượt mà hơn vào các trang web được bảo vệ

AWS WAF
Logo of CapSolver

Anh Tuan

04-Dec-2025

Cách giải quyết token Captcha của AWS (AMAZON) WAF
Cách giải quyết token CAPTCHA của AWS WAF

Bài viết này giải thích cách bạn có thể giải quyết CAPTCHA của AWS WAF theo cách nhanh chóng, rẻ tiền và dễ dàng bằng cách sử dụng CapSolver

AWS WAF
Logo of CapSolver

Anh Tuan

01-Dec-2025

Cách giải Captcha AWS bằng Puppeteer [Javascript] với phần mở rộng CapSolver
Làm thế nào để giải AWS Captcha sử dụng Puppeteer [Javascript] với phần mở rộng CapSolver

Học cách giải quyết captcha AWS một cách mượt mà bằng Puppeteer và Capsolver Extension, một hướng dẫn chi tiết về việc cài đặt và tự động hóa các giải pháp captcha hiệu quả

AWS WAF
Logo of CapSolver

Anh Tuan

25-Nov-2025

Cách giải CAPTCHA của AWS bằng NodeJS
Cách giải Captcha của AWS bằng NodeJS

Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách giải quyết Captcha / Thách thức AWS bằng Node.JS.

AWS WAF
Logo of CapSolver

Anh Tuan

03-Nov-2025

Gỡ dữ liệu web so với API
So sánh Web Scraping và API: Thu thập dữ liệu bằng web scraping và API

Học cách phân biệt giữa web scraping và API, các ưu điểm và nhược điểm của chúng, và phương pháp nào hiệu quả nhất để thu thập dữ liệu web có cấu trúc hoặc không có cấu trúc.

AWS WAF
Logo of CapSolver

Anh Tuan

29-Oct-2025