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

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

使用CAPTCHA和Challenge操作的最佳实践

按照本节中的指导来计划和实施Amazon WAF CAPTCHA 或挑战。

规划您的验证码并挑战实施

根据你的网站使用情况、你想要保护的数据的敏感度以及请求的类型,确定在哪里放置验证码谜题或无声挑战。选择要应用验证码的请求,以便根据需要展示谜题,但请避免在无用且可能降低用户体验的地方提出这些请求。使用该Challenge操作运行静默挑战,这些挑战对最终用户的影响较小,但仍有助于验证请求是否来自 JavaScript 已启用的浏览器。

识别您不希望受验证码影响的请求,例如对 CSS 或图像的请求。仅在必要时使用验证码。例如,如果您计划在登录时进行验证码检查,并且用户总是直接从登录屏幕转到另一个屏幕,则可能不需要在第二个屏幕上进行验证码检查,并且可能会降低您的最终用户体验。

仅对GETtext/html请求使用Challenge和CAPTCHA操作。不要将它们用于POST其他请求类型,因为其他请求的浏览器行为可能会有所不同,可能无法正确处理插页式广告。

客户可能接受 HTML,但仍然无法处理验证码或挑战插页式广告。例如,带有小 iFrame 的网页上的小部件可能接受 HTML,但无法显示验证码或对其进行处理。避免为这些类型的请求设置规则操作,就像对不接受 HTML 的请求一样。

如何使用CAPTCHA和保护您的敏感的非 HTML 数据Challenge

您可以通过以下方法对敏感的非 HTML 数据(如 API)使用验证码和Challenge保护。

  1. 识别接收 HTML 响应且在与敏感的非 HTML 数据请求附近运行的请求。

  2. 编写CAPTCHA与 HTML 请求相匹配且与敏感数据请求匹配的Challenge规则。

  3. 调整您的CAPTCHA和Challenge免疫时间设置,以便在正常的用户互动中,客户端从HTML请求中获得的令牌在请求您的敏感数据中可用且未过期。有关调整信息,请参见时间戳到期:代币豁免时间

当您的敏感数据请求与CAPTCHA或Challenge规则相匹配时,如果客户还有之前的谜题或挑战中的有效令牌,则该请求不会被阻止。如果令牌不可用或时间戳已过期,则访问您的敏感数据的请求将失败。有关规则操作的工作原理的更多信息,请参阅CAPTCHA和Challenge动作行为

使用验证码Challenge并调整您的现有规则

查看您的现有规则,看看是否要修改或添加这些规则。以下是需要考虑的一些常见情况。

  • 如果您有基于速率的规则来屏蔽流量,但为了避免屏蔽合法用户,您将速率限制保持在相对较高的水平,请考虑在具有较低限制和/CAPTCHA 或Challenge操作的封锁规则之前添加第二条基于速率的规则。阻塞规则仍将阻止任何 IP 以过高的速率发送请求,而新规则将以更低的速率阻止大多数自动流量。有关基于费率的规则的信息,请参阅基于速率的规则语句

  • 如果您有阻止请求的托管规则组,则可以将部分或全部规则的行为从切换Block到CAPTCHA或Challenge。为此,请在托管规则组配置中替代规则操作设置。有关替代规则操作的信息,请参阅规则操作替代规则

在部署之前测试您的验证码并对实现进行质疑

至于所有新功能,请按照中的指导进行操作测试和调整您的Amazon WAF保护措施

在测试期间,查看您的令牌时间戳到期要求并设置 Web ACL 和规则级别免疫时间配置,以便在控制网站访问权限和为客户提供良好体验之间取得良好的平衡。有关信息,请参阅 时间戳到期:代币豁免时间