前言
本示例仅做测试使用,进行学习交流,请自觉遵守法律法规!
本文中将 Web 应用防火墙简称为 WAF
问题描述
想通过 WAF 对 API 进行防护,如何配置。
问题分析
WAF 的 API 防护可以根据设定的 API 格式和参数,对请求API 流量进行检查,对不符合规则的动作执行观察或拦截。
解决方案
本文在 WAF 搭建成功,通过 WAF 可以访问到后端服务基础上,WAF 环境的搭建,您可以参考此链接。
1.正常访问后端
使用 curl 发送 Get 请求方法测试。
┌──(rootkali)-[~/Test/waf]
└─# curl -i shodan.xxxx.cn/sql/?id=1
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 01 Mar 2022 07:42:31 GMT
Content-Type: text/html
Content-Length: 7933
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Fri, 31 Oct 2014 19:10:23 GMT
ETag: "1efd-506bcbfada5c0"
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Access-Control-Request-Method: GET,POST,PUT
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Custom-Heade
Vary: Accept-Encoding
可以看到请求正常发送,返回码为 200。
2.开启 API 防护
防护策略如下: 参数位置为 query,名称为 id,类型为 integer,范围为 1-3。
然后使用 curl 发送 Get 请求方法测试。
┌──(root)-[~/Test/waf]
└─# curl -i shodan.xxxx.cn/sql/?id=1
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 01 Mar 2022 08:12:01 GMT
Content-Type: text/html
Content-Length: 7933
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Fri, 31 Oct 2014 19:10:23 GMT
ETag: "1efd-506bcbfada5c0"
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Access-Control-Request-Method: GET,POST,PUT
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Custom-Heade
Vary: Accept-Encoding
可以发现当 id 参数取值为 1 时可以正常返回。
┌──(root)-[~/Test/waf]
└─# curl -i shodan.xxxx.cn/sql/?id=4
HTTP/1.1 403 Forbidden
Server: nginx
Date: Tue, 01 Mar 2022 08:13:34 GMT
Content-Length: 98
Connection: keep-alive
Content-Type: text/html
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p> !!! 非法访问 !!! </p> </body> </html>
可以看到当 id 取值为4时(不在1-3范围内),返回自定义拦截响应,返回码为 403。
查看控制台日志管理:
可以看到请求命中了 api_schema 规则,被拦截。
如果您有其他问题,欢迎您联系火山引擎技术支持服务