使用 Amazon WAF 进行 Captcha 人机验证

5b813193a031dc5b042687ee73baa950.gif

 一、背景 

2021年的re:Invent大会发布了Amazon WAF 验证码功能即 Captcha。Captcha 是 Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的图灵测试)的首字母缩写,通常用于区分机器人和人类访客,以防止 Web 抓取、凭证填充和垃圾邮件等恶意活动。

本文编写时候 Amazon WAF Captcha 已经在部分 Region 的区域级的 Amazon WAF 上推出,未来将 Amazon CloudFront 以及更多 Region 获得支持。有关信息可以参考如下网址(中文):

https://aws.amazon.com/cn/about-aws/whats-new/2021/11/aws-waf-captcha-support/?nc1=h_ls

Amazon WAF 验证码的使用场景包括但不限于:

  • 用户/管理员的登录页等 Landing Page

  • 被高频引用的界面,有被 DDOS 可能的页面

  • 有被 Bot 提交信息的风险的页面

  • 其他关键操作页面

Amazon WAF 验证码的实现方式是在现有 Amazon WAF 规则处理中在 Action 行为可选择允许Allow、阻止Block和计数Count的基础上,增加了选项Captcha,即验证码规则。这就意味着当这条规则被触发时候,之前只能选择通过或者拒绝,现在可以选择跳转到验证码页面进行人机验证,认证通过则可以访问,认证失败则阻断访问。由于 Amazon WAF 验证码成为了 Action 选项的一部分,因此意味着验证码规则可单独使用也可组合其他规则使用。

本文描述配置一个直接防护场景,对管理员路径访问如 https://xxx.com/admin/ 进行验证码防护。

二、为特定规则开启验证码 

本文假设已经有一个正在运行的 Amazon WAF 规则,接下来新增验证码防护。

1、设置自定义规则组(Rule Group)

进入到 WAF & Shield 界面下,点击左侧 Amazon WAF 菜单中的 Rule groups菜单,显示当前已经存在的规则组。点击页面上方中央切换 Region 的下拉框,默认显示为 US East(N.Virginia),点击这个下拉框切换到已经支持 Amazon WAF 验证码的区域(Amazon CloudFront WAF 和更多支持 Region 即将支持)。然后点击右上角的创建按钮。如下截图。

35527a0e95015c3c3a1e66453de2ba83.png

在创建规则组第一步,输入名称,确保区域正确,然后点击下一步继续。如下截图。

74f6accfd9174db57be29c91cec23131.png

在创建向导第二步,点击 Add 按钮。如下截图。

702976ef7a60d85521b381493c43e913.png

在 Rule Builder 界面,点击右上角的 Rule visual editor,在 Name 名称位置输入希望使用的名称,在 Type 位置选中 Regular rule。在页面下方请求条件 If a request 位置选择 matches the statement。如下截图。

9dcb8342ca4f8e8df9b8337cced032fe.png

在配置规则的下方,选择 Inspect 类型是 URI path,即对访问路径做检查。在 Match type 匹配类型位置,选择 Contains string 表示包含如下字符。在 String to match 位置输入要匹配的关键路径,例如输入/admin。在下方 Text transformation 位置选择 None 表示不变换。继续向下滚动页面。如下截图。

dc2735f0aaf0a7864a93e76cd38cd275.png

在页面上的 Action 位置选择类型是 CAPTCHA,选中 Set a custom immunity time for this rule 选中这个选项,在 Immunity time 位置输入86400秒,表示认证通过的 token 有24小时有效。最后点击右下角 Add rule 位置。如下截图。

e122a6a04164bcafe4655208934a43a0.png

返回向导界面,在页面上的 Rule 清单下已经可以看到这条规则。在 Capacity位置无需修改,保持默认的数字即可,点击右下角的 Next 按钮。如下截图。

ac5e18ec6ca8d9f69a884504a04935fb.png

在向导第三步设置优先级位置,保持默认,点击 Next 按钮继续。如下截图。

934636e673e34933c356613c25630285.png

在创建向导最后一步,点击右下角的 Create rule group 完成创建。如下截图。

08d8be42ffda90e82cecf389fe9c04a3.png

至此规则组创建完成。界面上显示绿色的表示创建完成。如下截图。

7b22e4d2d0fe04df62c33cfa525cfb18.png

2、与现有的 WEB ACL 绑定

进入到 WAF & Shield 界面下,点击左侧 Amazon WAF  菜单中的 Web ACLs 菜单。点击页面上方中央切换 Region 的下拉框,默认显示为 US East(N.Virginia),点击这个下拉框切换到已经支持WAF验证码的区域。这将列出当前已经存在的 ACL。点击当前的 Web ACL 的名字继续。如下截图。

eb0279faff64af24ef1d16ad54e1d680.png

进入 Web ACL 配置详情,点击第二个标签页 Rules,点击右上角的 Add rules 按钮,选择下拉菜单 A dd my own rules and rule groups。如下截图。

24f0a61f2f7c5d6f264b7f9a6b831654.png

进入添加规则界面,点击最右侧的 Rule group 按钮,在下方名称位置输入自定义名称,然后向下滚动屏幕。如下截图。

6e7fca17a1f449ec59b81f19a949c2b1.png

在页面下方的 Rule group 位置,选择本文前一步创建好的规则组的名字。然后点击右下角的 Add rule 按钮。最后一个选项 Override rule group action - optional 里边对应的 Enable 不要选中。如下截图。

1f9f772710e74e06a9de3451d0384e6a.png

在设置规则优先级界面,可根据需要调整策略执行的优先级。也可以保持默认。如下截图。

ce83fd69038a5bef7fc0aeb195e45a1f.png

配置完成。现在 Web ACL 中已经可以看到。如下截图。

d5af65f7c8e3bfc0d5e5de3f88381de9.png

至此 Amazon WAF 规则配置完成。

三、访问测试 

现在访问 Amazon WAF 防护的资源,在网址中包含 /admin 路径触发验证规则。点击 Begin 按钮即可开始人机验证。如下截图。可看到如下截图。

1185cfe0069f55b4d93f943b6d830e31.png

人机验证的几种形式包括拼图。如下截图。

610e03be0768165eb28d7fa6a797f4e1.png

路径解谜。如下截图。

33ed012a84420727bc523caf070a425b.png

听录音输入单词等。如下截图。

11ddd7ad3501f3a1c61d086dce199b39.png

通过验证后,即可显示验证成功。如下截图。

76fd3bad61f05263206987df78fb9858.png

随后页面会自动跳转到正常的网页访问。

至此 Amazon WAF Captcha 验证码配置完成。

 四、参考文档 

参考文档:

https://docs.aws.amazon.com/waf/latest/developerguide/waf-captcha.html

本篇作者

e5225ba3502e40bbb24bdff93e24da9e.png

刘辛酉

亚马逊云科技解决方案架构师

曾服务于 Parallels、Siemens,在 Atos 担任管理服务部首席架构师。拥有十余年数据中心、互联网技术经验,长期为制造、汽车等行业头部客户提供 IT 咨询和服务。加入亚马逊云科技后负责零售、快消、食品和制造等行业。擅长硬件、网络等领域设计。

1593e93d2271f062c629f59efc77425a.png

fcdfa36046eea9020eb1e50f12bc59d6.gif

f617751394a988b705f9f71e912620f8.gif

听说,点完下面4个按钮

就不会碰到bug了!

eec85684b09381a4f0daada1cbb70cbb.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值