...
3、WEB集成-Captcha Integration
...
第1步:创建WebACL和添加BotControl托管规则
如果请求中不包含 token 或者 token 无效,这条托管规则会触发 Captcha rule action,从而触发 Client SDK 在后台静默完成 Captcha 计算任务得到 token。
...
| Code Block | ||
|---|---|---|
| ||
{
"Name": "Block-Requests-With-Missing-Or-Rejected-Token-Label",
"Priority": 1,
"Statement": {
"AndStatement": {
"Statements": [
{
"OrStatement": {
"Statements": [
{
"LabelMatchStatement": {
"Scope": "LABEL",
"Key": "awswaf:managed:token:absent"
}
},
{
"LabelMatchStatement": {
"Scope": "LABEL",
"Key": "awswaf:managed:token:rejected"
}
}
]
}
},
{
"NotStatement": {
"Statement": {
"ByteMatchStatement": {
"SearchString": "POST",
"FieldToMatch": {
"Method": {}
},
"TextTransformations": [
{
"Priority": 0,
"Type": "NONE"
}
],
"PositionalConstraint": "EXACTLY"
}
}
}
}
]
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "Block-Requests-With-Missing-Or-Rejected-Token-Label"
}
} |
...
第2步:查看和复制JavaScript Integration URL地址
从 WAF 的控制台中进入Application integration,选择Captcha integration 选项,这里会显示已经开启 AWSManagedRulesBotControlRuleSet 规则的 ACL。
把ACL所对应的JavaScript Integration URL添加到前端代码的<head></head>之间。
...
第3步,集成和部署前端代码
WAF client API 向后端发起了Post的waf/query请求,后端使用 AWS EC2做为测试服务器部署了waf/query服务,实现返回http response,并通过 ALB 提供对外访问,ALB 被刚才配置的 WEB ACL 所保护。
...
| Code Block | ||
|---|---|---|
| ||
server {
listen 80;
#listen [::]:80;
#server_name _;
root /usr/share/nginx/html;
index index.html index.htm
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
} |
效果如下:
...
第4步:配置AWF、ALB和TokenDomain
1、在WAF ACL关联ALB
2、配置Token Domain列表
...
WAF 后台的 Bot control Rule 进行 token 校验成功后,流量被发送到 ALB。
Echo-Server 会把发送的请求原样返回,可以看到请求中包含了 EC2后台服务器,会把发送的请求原样返回,可以看到请求中包含了 token 信息。
效果如下:
请求头和报文
| Code Block | ||
|---|---|---|
| ||
POST http://api001.bosicloud.one/waf/query 状态 200 版本HTTP/1.1 传输485 字节(大小 98 字节) Referrer 策略strict-origin-when-cross-origin DNS 解析系统 POST /waf/query HTTP/1.1 Host: api001.bosicloud.one User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0 Accept: */* Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: http://web001.bosicloud.one/ Origin: http://web001.bosicloud.one Connection: keep-alive Priority: u=4 Content-Length: 0 |
...
通过 Chrome 浏览器开发者模式可以看到,由于请求不带 token,请求被 WAF 所拒绝。
效果如下:




