

**引入全新的主机体验 AWS WAF**

现在，您可以使用更新的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息，请参阅[使用控制台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

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

# CAPTCHA 和 Challenge 操作行为
<a name="waf-captcha-and-challenge-actions"></a>

本节介绍了 CAPTCHA 和 Challenge 操作的作用。

当 Web 请求与规则的检查标准相匹配CAPTCHA或Challenge操作时，将根据其令牌状态和免疫时间配置来 AWS WAF 确定如何处理请求。 AWS WAF 还会考虑请求是否可以处理验证码拼图或挑战脚本插页式广告。这些脚本被设计为作为 HTML 内容处理，只有期望 HTML 内容的客户端才能正确处理它们。

**注意**  
当您在其中一个规则中使用 CAPTCHA 或 Challenge 规则操作或在规则组中将其作为规则操作覆盖时，您需要支付额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**操作如何处理 web 请求**  
AWS WAF 按如下方式对 Web 请求应用CAPTCHA或Challenge操作：
+ **有效令牌** — AWS WAF 处理方式与Count操作类似。 AWS WAF 应用您为规则操作配置的所有标签和请求自定义，然后使用保护包 (Web ACL) 中的其余规则继续评估请求。
+ **令牌丢失、无效或已过期** — AWS WAF 停止对请求的保护包 (Web ACL) 评估并阻止其前往预期目的地。

  AWS WAF 根据规则操作类型生成一个响应，然后将其发送回客户端：
  + **Challenge**： AWS WAF 在响应字段中包含以下内容：
    + 值为 `challenge` 的标头 `x-amzn-waf-action`。
**注意**  
对于在客户端浏览器中运行的 Javascript 应用程序，此标头仅在应用程序的域中可用。标头不可用于跨域检索。有关详细信息，请参阅以下部分。
    + HTTP 状态代码 `202 Request Accepted`。
    + 如果请求包含值为的`Accept`标头`text/html`，则响应将包括带有质询脚本的JavaScript 页面插页式广告。
  + **CAPTCHA**— 在响应中 AWS WAF 包括以下内容：
    + 值为 `captcha` 的标头 `x-amzn-waf-action`。
**注意**  
对于在客户端浏览器中运行的 Javascript 应用程序，此标头仅在应用程序的域中可用。标头不可用于跨域检索。有关详细信息，请参阅以下部分。
    + HTTP 状态代码 `405 Method Not Allowed`。
    + 如果请求包含值为的`Accept`标头`text/html`，则响应将包含带有验证码脚本的JavaScript 页面插页式广告。

要在保护包（web ACL）或规则级别配置令牌到期时间，请参阅 [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。

**在客户端浏览器中运行的 JavaScript 应用程序无法使用标头**  
当使用验证码或质询 AWS WAF 响应来响应客户端请求时，它不包括跨源资源共享 (CORS) 标头。CORS 标头是一组访问控制标头，它们告诉客户端 Web 浏览器 JavaScript应用程序可以使用哪些域、HTTP 方法和 HTTP 标头。如果没有 CORS 标头，在客户端浏览器中运行的 JavaScript 应用程序将无法访问 HTTP 标头，因此无法读取CAPTCHA和Challenge响应中提供的`x-amzn-waf-action`标头。

**质询和验证码插页式广告的用途**  
当质询插页式广告运行时，在客户端成功响应之后，如果它还没有令牌，则插页式广告会为其初始化一个令牌。然后，它会使用质询解题时间戳更新令牌。

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

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

您可以配置如何 AWS WAF 处理令牌。有关信息，请参阅[代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。