EveryInfra

AWS WAF 挑战

AWS WAF 挑战Amazon Web Services (AWS WAF)反爬平台挑战 —— 默认是无感的静默浏览器挑战,规则动作设成 CAPTCHA 时才升级成一道随机题型的可见验证码多数情况下什么都看不到:页面加载时插入几秒的静默校验,完成后自动跳回原页面。只有命中的规则动作是 CAPTCHA 时,才会看到一张 AWS 品牌的挑战页,题型由 AWS 随机生成并持续轮换,每题都带「换一题」「音频/视觉切换」「查看说明」「提交」四个标准控件,支持读屏器与键盘操作。

正在查询可用性…$2.22 / 1K 次按成功计费,失败退款

接口规格

项目
typeaws_waf
必填参数website_url
可选参数
返回一串 Cookiesolution.cookie
怎么用这个解带回请求的 Cookie 串
价格$2.22 / 1K 次 —— 按成功计费,没解出来退款
厂商文档Amazon Web Services (AWS WAF) 官方文档

参数去页面哪里取

下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。

我们这条只要 website_url,其余全部由我们从页面现取。但你得先确认面前这堵墙确实是 AWS WAF,三条硬指纹:

  1. 响应正文里的 `window.gokuProps` —— 被拦下的那次响应(状态码常见 405,未必是 403)正文里会有一段 window.gokuProps = {"key":"AQID…","iv":"…","context":"…"}。别的产品没有这个全局变量,这是最可靠的判据。
  2. **脚本域名 *.awswaf.com** —— 挑战会加载一段来自 awswaf.com 子域的 JS,路径以 /challenge.js(静默挑战)或 /jsapi.js(站点自行集成的 CAPTCHA API)结尾。AWS 官方 CSP 指引就是让你放行 https://*.awswaf.com,可以反过来当识别依据。
  3. Cookie 名 `aws-waf-token` —— 通过之后 Set-Cookie 里出现它。站点自行集成 SDK 时也可能改用同名请求头 aws-waf-token 携带(不是 x- 前缀)。

`gokuProps` 里的 `key` / `iv` / `context` 看着像该抄下来传给我们的参数,但不要抄。 它们和那一次挑战一一绑定、取一次即作废;你抄下来再调用,拿到的是「参数已过期」而不是解。我们只要页面 URL,这三个值每次现解析。

另一条路径的识别特征:如果页面里有 AwsWafIntegration.fetch(...)AwsWafCaptcha.renderCaptcha(container, { apiKey: "…" }),说明站点自己集成了 SDK。那个 apiKey 是站点向 AWS 申请、绑定自有域名的密钥,同样不需要你传给我们。

调用示例

一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。

请求
curl -X POST https://api.everyinfra.com/api/v1/captcha \  -H "Authorization: Bearer omg_你的KEY" \  -H "Content-Type: application/json" \  -d '{"type":"aws_waf","website_url":"<website_url>"}'
响应
{  "solution": {    "cookie": "…"  },  "billing": { "charged": true, "credits": 160 }}

怎么确认目标站用的就是它

它不是站点挂上去的一个独立验证码组件,而是 WAF 规则匹配后由边缘返回的一个动作。浏览器执行 AWS 下发的挑战脚本,接受一轮浏览器审讯(自动化痕迹、浏览器设置不一致等)加上鼠标/键盘交互的被动采集;通过后 AWS 下发一个加密的会话 token,存进 aws-waf-token cookie,后续请求带着它才放行。

容易搞混的

① 和 Cloudflare 的「Just a moment...」全页挑战外观相近,都是拦截后自动跳回;判据看响应正文里是 window.gokuProps(AWS)还是 __cf_chl / cf-chl 系列(Cloudflare)。② 更要紧的是别和 Amazon 零售站(amazon.com)那个歪扭字母图片验证码混为一谈 —— 那是 Amazon 电商站自己的图形验证码,属于图片文字识别,交付的是一串文本;AWS WAF 挑战交付的是 Cookie,两者机制、参数、结果形态完全不同。③ 静默 Challenge 与可见 CAPTCHA 是同一套 token 体系下的两个不同规则动作,同一站点可能两种都配,看到「没弹验证码」不代表没有 WAF 挑战。

去看 Cloudflare 那一条 →

常见部署场景

已知的坑

交付的是 Cookie 不是表单 token —— 页面上没有地方可填,你要把它带进后续请求的 Cookie 头(或同名请求头 aws-waf-token

有免疫期:AWS 侧默认 300 秒,站点可自行调整。CAPTCHA 最短 60 秒,两者最长都是 259200 秒(3 天)。过期后同一条规则会再拦一次

只在 HTTPS 下工作 —— AWS 明说挑战脚本要求安全上下文,本地 http 调试环境里根本不会触发,别在 http 环境里排查它

本类型出解比常规验证码慢,等 30 秒是正常的,别按其他类型的耗时预期设超时

站点可以给不同规则配不同的免疫期(比如敏感接口调得很短),所以「刚过了一次」不代表整站畅通

本类型出结果比其他类型慢,等 30 秒是正常的

常见问题

AWS WAF 挑战 要传哪些参数?

必填 website_url,没有可选参数。请求里 type 传 aws_waf。

解出来的东西怎么用?

返回一串 Cookie,取 solution.cookie。带回请求的 Cookie 串

apiKey 要去页面的哪里找?

重点找 apiKey。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。

怎么确认目标站用的就是 AWS WAF 挑战?

① 和 Cloudflare 的「Just a moment...」全页挑战外观相近,都是拦截后自动跳回;判据看响应正文里是 window.gokuProps(AWS)还是 __cf_chl / cf-chl 系列(Cloudflare)。② 更要紧的是别和 Amazon 零售站(amazon.com)那个歪扭字母图片验证码混为一谈 —— 那是 Amazon 电商站自己的图形验证码,属于图片文字识别,交付的是一串文本;AWS WAF 挑战交付的是 Cookie,两者机制、参数、结果形态完全不同。③ 静默 Challenge 与可见 CAPTCHA 是同一套 token 体系下的两个不同规则动作,同一站点可能两种都配,看到「没弹验证码」不代表没有 WAF 挑战。

有什么容易踩的坑?

交付的是 Cookie 不是表单 token —— 页面上没有地方可填,你要把它带进后续请求的 Cookie 头(或同名请求头 aws-waf-token

多少钱一次,失败扣不扣?

$2.22 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。

开始接入

一个端点覆盖全部验证码类型,按成功计费,失败与空结果一律退款。