首先推荐一个开源WAF: https://github.com/corazawaf/coraza
该产品改造了coreruleset为coraza-coreruleset以保证适配性: https://github.com/corazawaf/coraza-coreruleset
在研究过程中我发现他有个在线网址提供给大家测试WAF防护策略: https://playground.coraza.io/
也是工作习惯了,用yakit抓了个包想看看是怎么发送到后台的,结果发现点击左上角run(就是直觉上的发送键),但是一个请求都没到后台
于是寻找到了这个页面的源码一探究竟: https://github.com/k4n5ha0/coraza-playground
看完源代码了解到这个系统将go语言写的coraza编译成了wasm文件让js调用,在浏览器内就将http请求包含的威胁判断了出来
所以我们来试一下,操作系统win10,、go1.22.2、git环境:
该waf不兼容windows请在git客户端下执行编译命令
go run mage.go build
之后通过以下命令执行
go run mage.go run
之后就可以使用浏览器访问如下图:
在代码目录中,编译生成的www目录我们可以找到编译成功的前端代码
其中app.js中就包含了调用wasm的代码如下图
最终设计:
1)设计系统时应要求前端使用统一的请求发送方法,前端代码应强混淆强加密
2)系统在发送请求之前应调用coraza执行请求过滤策略(也就是coraza-coreruleset中REQUEST为开头的策略),如无风险后增加一个签名后才能向后台服务器发送,服务器获取到请求后如签名不正确则丢弃该请求
3)服务器将响应包增加签名后发送给当前请求
4)前端在获取到响应包后对签名进行校验,如果签名通过则将响应包发送给coraza执行响应过滤策略(也就是coraza-coreruleset中RESPONSE为开头的策略),如果通过则视为无问题
5)上述前端的签名校验和加密策略应放到wasm之中,并且对wasm做混淆加密防止被逆向
谢谢
标签:浏览器,技巧,waf,coraza,签名,coreruleset,go,run,请求 From: https://www.cnblogs.com/k4n5ha0/p/18122442