亚马逊AWS官方博客
使用 Amazon WAF 进行 Captcha人机验证
一、背景
2021年的re-Invent大会发布了Amazon WAF 验证码功能即Captcha。Captcha是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的图灵测试)的首字母缩写,通常用于区分机器人和人类访客,以防止 Web 抓取、凭证填充和垃圾邮件等恶意活动。
本文编写时候Amazon WAF Captcha已经在部分Region的区域级的WAF上推出,未来将在CloudFront以及更多Region获得支持。有关信息可以参考如下网址(中文):https://thinkwithwp.com/cn/about-aws/whats-new/2021/11/aws-waf-captcha-support/?nc1=h_ls
WAF 验证码的使用场景包括但不限于:
- 用户/管理员的登录页等Landing Page
- 被高频引用的界面,有被DDOS可能的页面
- 有被Bot提交信息的风险的页面
- 其他关键操作页面
WAF 验证码的实现方式是在现有 WAF 规则处理中在 Action 行为可选择允许Allow、阻止Block和计数Count的基础上,增加了选项Captcha,即验证码规则。这就意味着当这条规则被触发时候,之前只能选择通过或者拒绝,现在可以选择跳转到验证码页面进行人机验证,认证通过则可以访问,认证失败则阻断访问。由于WAF验证码成为了Action选项的一部分,因此意味着验证码规则可单独使用也可组合其他规则使用。
本文描述配置一个直接防护场景,对管理员路径访问如https://xxx.com/admin/ 进行验证码防护。
二、为特定规则开启验证码
本文假设已经有一个正在运行的WAF规则,接下来新增验证码防护。
1、设置自定义规则组(Rule Group)
进入到WAF & Shield界面下,点击左侧AWS WAF菜单中的Rule groups菜单,显示当前已经存在的规则组。点击页面上方中央切换Region的下拉框,默认显示为US East(N.Virginia),点击这个下拉框切换到已经支持WAF验证码的区域(CloudFront WAF和更多支持Region即将支持)。然后点击右上角的创建按钮。如下截图。
在创建规则组第一步,输入名称,确保区域正确,然后点击下一步继续。如下截图。
在创建向导第二步,点击Add按钮。如下截图。
在Rule Builder
界面,点击右上角的Rule visual editor
,在Name
名称位置输入希望使用的名称,在Type
位置选中Regular rule
。在页面下方请求条件If a request
位置选择matches the statement
。如下截图。
在配置规则的下方,选择Inspect
类型是URI path
,即对访问路径做检查。在Match type
匹配类型位置,选择Contains string
表示包含如下字符。在String to match
位置输入要匹配的关键路径,例如输入/admin
。在下方Text transformation
位置选择None
表示不变换。继续向下滚动页面。如下截图。
在页面上的Action
位置选择类型是CAPTCHA
,选中Set a custom immunity time for this rule
选中这个选项,在Immunity time
位置输入86400
秒,表示认证通过的token有24小时有效。最后点击右下角Add rule
位置。如下截图。
返回向导界面,在页面上的Rule
清单下已经可以看到这条规则。在Capacity
位置无需修改,保持默认的数字即可,点击右下角的Next
按钮。如下截图。
在向导第三步设置优先级位置,保持默认,点击Next
按钮继续。如下截图。
在创建向导最后一步,点击右下角的Create rule group
完成创建。如下截图。
至此规则组创建完成。界面上显示绿色的表示创建完成。如下截图。
2、与现有的WEB ACL绑定
进入到WAF & Shield
界面下,点击左侧Amazon WAF
菜单中的Web ACLs
菜单。点击页面上方中央切换Region的下拉框,默认显示为US East(N.Virginia)
,点击这个下拉框切换到已经支持WAF验证码的区域。这将列出当前已经存在的ACL。点击当前的Web ACL的名字继续。如下截图。
进入Web ACL 配置详情,点击第二个标签页Rules
,点击右上角的Add rules
按钮,选择下拉菜单Add my own rules and rule groups
。如下截图。
进入添加规则界面,点击最右侧的Rule group
按钮,在下方名称位置输入自定义名称,然后向下滚动屏幕。如下截图。
在页面下方的Rule group
位置,选择本文前一步创建好的规则组的名字。然后点击右下角的Add rule
按钮。最后一个选项Override rule group action - optional
里边对应的Enable
不要选中。如下截图。
在设置规则优先级界面,可根据需要调整策略执行的优先级。也可以保持默认。如下截图。
配置完成。现在Web ACL 中已经可以看到。如下截图。
至此WAF规则配置完成。
三、访问测试
现在访问WAF防护的资源,在网址中包含 /admin 路径触发验证规则。点击Begin
按钮即可开始人机验证。如下截图。可看到如下截图。
人机验证的几种形式包括拼图。如下截图。
路径解谜。如下截图。
听录音输入单词等。如下截图。
通过验证后,即可显示验证成功。如下截图。
随后页面会自动跳转到正常的网页访问。
至此WAF Captcha验证码配置完成。
四、参考文档
参考文档:
https://docs.thinkwithwp.com/waf/latest/developerguide/waf-captcha.html