在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。
如果您发现自己的网站使用的是 Amazon AWS WAF,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 Amazon AWS WAF 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。
AWS WAF (Amazon Web Services Web Application Firewall) 是亚马逊提供的云端 Web 应用程序防火墙,用于保护网站、API 和 Web 应用程序免受攻击和恶意流量的侵害。简单来说,它是一个位于您的网站或 API 前端的过滤器,决定允许哪些访问流量通过,阻止哪些流量。
如果网站启用了 Challenge/CAPTCHA(质询/验证码),访问者可能会看到一个单独的验证页面。系统会要求他完成一项任务,例如选择某一类别的所有图片,以确认他不是机器人。
在测试受 AWS WAF 保护的资源时,确保防护功能正常运行且集成正确非常重要。
您可以手动检查防护的工作情况:
验证通过后,AWS WAF 会设置 Cookies,确认用户或客户端已通过检查并允许受信任的流量通过。
对于自动验证码识别,您可以使用专门的服务,例如 CapMonster Cloud — 这是一个接收验证码参数、在服务器端处理并返回现成 Cookies 或令牌的工具。将它们代入浏览器即可在无需用户参与的情况下通过验证。
通过 CapMonster Cloud API 工作的一般流程:
在解决 AWS WAF 的请求中,必须指定以下参数:
type - AmazonTask;
websiteURL - 解决验证码的主页地址;
challengeScript - challenge.js 的链接;
以下参数取自 window.gokuProps(均为字符串类型):
captchaScript - captcha.js 的链接(如果您只有 Challenge,则可能不存在此链接);
cookieSolution - 默认为 false — 响应中您将收到 "captcha_voucher" 和 "existing_token"。如果您需要 "aws-waf-token" Cookies,请指定 true。;
userAgent - 浏览器的 User-Agent。请传输 Windows 操作系统的 真实有效 UA;
此外,此任务需要使用您的代理(Proxy):
proxyType :
proxyAddress - 代理 IP 地址 IPv4/IPv6;
proxyPort - 代理端口;
proxyLogin - 代理服务器用户名;
proxyPassword - 代理服务器密码.
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"
}
}从 CapMonster Cloud 获取的数据(有效的 AWS WAF Cookies)可以代入浏览器上下文或 HTTP 客户端中。此后,网站会将请求视为已验证,并允许继续操作,无需额外的检查或 Challenge 页面。
为了自动化和测试,建议使用 Puppeteer、Selenium 或 Playwright — 它们允许:
通过这种方式,可以检查防护工作的正确性,并确保网站正确接受和处理有效的 AWS WAF Cookies。
重要提示: 这些代码示例使用 cookieSolution=False。如果结果中您需要获取 Cookies,请设置 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";
// 代理设置
const PROXY = {
proxyType: "http",
proxyAddress: "PROXY_HOST",
proxyPort: 1234,
proxyLogin: "PROXY_USER",
proxyPassword: "PROXY_PASS"
};
(async () => {
// 1) 通过代理打开页面并收集 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" });
// 等待 challenge 和 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"));
});
// 提取 AWS WAF 参数 (key, context, iv, 脚本链接)
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) 通过 CapMonster Cloud 解决 AWS WAF
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) 代入 aws-waf-token 并清除旧的
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();
// 清除您域名的旧 aws-waf-token
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);
// 设置新的 aws-waf-token
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 无法直接安装在网站上。它只能通过 AWS 资源工作:
步骤 1. 创建 AWS 账户(如果还没有)
前往:https://portal.aws.amazon.com/billing/signup。创建账户 > 验证邮箱和电话。
步骤 2. 您可以使用标准或新的 AWS WAF 界面:
步骤 3. 创建防护包 (Web ACL)
这就是针对您资源的防护规则集。
步骤 4. 配置应用程序类别:
在 Tell us about your app 块中:
这些参数用于让 AWS 推荐最佳规则。
步骤 5. 选择要保护的资源
如果您的网站在 CloudFront 上 > 选择 CloudFront distributions
如果您的后端在 ALB 上 > 选择 Regional resources如果是 API > 选择 API Gateway REST API勾选所需资源 > 点击 Add。
步骤 6. 选择初始规则集。
AWS 会建议:
Recommended for you — 新手的最佳选择
它包含:点击 Next。
步骤 7. 配置(可选)
在 Customize protection pack (web ACL) 屏幕上:
主要参数:
日志记录 (Logging)
选择日志写入位置:
(建议使用 S3 + Athena)。
步骤 8. 创建 Web ACL
点击:Add protection pack (web ACL)
AWS 将创建规则并将其绑定到您的资源。
验证
为了确保防护正在运行:
在任何规则中 > Action > CAPTCHA / Challenge
这可以减少机器人流量并保护登录和表单页面。
在 Rule groups 部分,您可以添加:
如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。
对于Amazon AWS WAF,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 Amazon AWS WAF,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。