CAPTCHA和Challenge操作的工作原理 - Amazon WAF、Amazon Firewall Manager 和 Amazon Shield Advanced
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CAPTCHA和Challenge操作的工作原理

Amazon WAFCAPTCHA并且Challenge是标准的规则操作,因此它们相对容易实现。要使用其中任何一个,您需要为规则创建检查标准以确定要检查的请求,然后指定两个规则操作之一。有关规则操作选项的一般信息,请参阅Amazon WAF 规则操作

CAPTCHA和Challenge动作行为

当 Web 请求与带有CAPTCHA或Challenge操作的规则的检查标准相匹配时,将根据其令牌状态和豁免时间配置Amazon WAF确定如何处理该请求。 Amazon WAF还考虑请求是否可以处理 CAPTCHA 拼图或挑战脚本插页式广告。这些脚本旨在作为 HTML 内容进行处理,只有期待 HTML 内容的客户端才能正确处理它们。

注意

当您在其中一个规则中使用CAPTCHA或Challenge规则操作或在规则组中用作规则操作替代时,会向您收取额外费用。有关更多信息,请参阅 Amazon WAF 定价

该操作如何处理 Web 请求

Amazon WAF将CAPTCHA或Challenge操作应用于 Web 请求,如下所示:

  • 有效令牌 —Amazon WAF 处理此问题与Count操作类似。 Amazon WAF应用您为规则操作配置的所有标签和请求自定义设置,然后使用 Web ACL 中的其余规则继续评估请求。

  • 令牌缺失、无效或已过期 —Amazon WAF 停止对请求的 Web ACL 评估,并阻止它到达预期目标。

    Amazon WAF根据规则操作类型,会生成一个响应,然后将其发送回客户端:

    • Challenge— 在响应中Amazon WAF包括以下内容:

      • 值为 challenge 的标头 x-amzn-waf-action

      • HTTP 状态代码 202 Request Accepted

      • 如果请求包含值为的Accept标头text/html,则响应包含具有质询脚本的JavaScript 页面插页式广告。

    • CAPTCHA— 在响应中Amazon WAF包括以下内容:

      • 值为 captcha 的标头 x-amzn-waf-action

      • HTTP 状态代码 405 Method Not Allowed

      • 如果请求包含值为的Accepttext/html标头,则响应包含带有 CAPTCHA 脚本的JavaScript 页面插页式广告。

要在 Web ACL 或规则级别配置令牌到期时间,请参阅时间戳到期:代币豁免时间

插页式广告的用途

当挑战插页式挑战运行时,在客户端成功响应之后,如果它还没有代币,插页式会为其初始化一个代币。然后它使用挑战解析时间戳更新代币。

当 CAPTCHA 插页式广告运行时,如果客户端还没有令牌,CAPTCHA 插页式会首先调用挑战脚本来挑战浏览器并初始化令牌。然后,插页式会运行其验证码谜题。当最终用户成功完成拼图时,插页式会使用验证码解析时间戳更新令牌。

无论哪种情况,在客户端成功响应且脚本更新令牌后,脚本都会使用更新的令牌重新提交原始 Web 请求。

您可以配置如何Amazon WAF处理令牌。有关信息,请参阅 Amazon WAF网络请求令牌

CAPTCHA以及日志和指标中的Challenge操作

CAPTCHA和Challenge操作可以是非终止的(例如Count),也可以是终止的(例如)Block。结果取决于请求是否具有具有操作类型的未过期时间戳的有效令牌。

  • 有效令牌 — 当操作找到有效令牌但未阻止请求时,按如下方式Amazon WAF捕获指标和日志:

    • 增加和RequestsWithValidCaptchaTokenCaptchaRequestsChallengeRequests和的指标RequestsWithValidChallengeToken

    • 将比赛记录为操作为CAPTCHA或的nonTerminatingMatchingRules条目Challenge。以下清单显示了与CAPTCHA操作进行此类匹配的日志部分。

      "nonTerminatingMatchingRules": [ { "ruleId": "captcha-rule", "action": "CAPTCHA", "ruleMatchDetails": [], "captchaResponse": { "responseCode": 0, "solveTimestamp": 1632420429 } } ]
  • 令牌@@ 缺失、无效或过期 — 当操作因令牌丢失或无效而阻止请求时,按如下方式Amazon WAF捕获指标和日志:

    • 增加CaptchaRequests或的指标ChallengeRequests

    • 将匹配记录为带有 HTTP405 状态码的CaptchaResponse条目或带有 HTTP202 状态码的ChallengeResponse条目。日志显示请求是否缺少令牌或时间戳已过期。该日志还表明是Amazon WAF向客户端发送了 CAPTCHA 插页式页面,还是向客户端浏览器发送了静默质询。以下列表显示了与CAPTCHA操作进行此类匹配的日志部分。

      "terminatingRuleId": "captcha-rule", "terminatingRuleType": "REGULAR", "action": "CAPTCHA", "terminatingRuleMatchDetails": [], ... "responseCodeSent": 405, ... "captchaResponse": { "responseCode": 405, "solveTimestamp": 0, "failureReason": "TOKEN_MISSING" }

有关Amazon WAF日志的信息,请参见记录 Web ACL 流量

有关Amazon WAF指标的信息,请参阅Amazon WAF 指标和维度

有关规则操作选项的信息,请参阅Amazon WAF 规则操作