引用读取XWAF的规则文件 - shengnoah/blues GitHub Wiki
layout: post title: 引用读取XWAF的规则文件 date: 2017-04-17 10:00:18 +0800 categories: candylab
作者:糖果
XWAF是一款开源的WAF产品,详细的介绍大家参考: 开源WEB防火墙XWAF介绍 ,作者的官方的站点:XWAF官网。
在之前的工程中,我们就直接引入了XWAF的规则文件,我们在此模拟读入一个标准的XWAF的JSON规则文件到Share.Diction中。
app.lua
app:get("/xwaf", function(request,id)
local json_text = bjson.loadf("./app/data/rules/args.rule", env)
local t = bjson.decode(json_text)
buffer.sett("args", t)
meta = buffer.gett("args")
ngx.say(bjson.pprint(meta))
end)
app:get("/ltbl", function(request,id)
local json_text = {Id=25, RuleType="args", RuleItem="(onmouseover|onerror|onload)\\="}
local t = bjson.decode(json_text)
buffer.sett("args", t)
meta = buffer.gett("args")
ngx.say(bjson.pprint(meta))
end)
XWAF有不单一个rules文件,我们选中了其中的args这个文件进行了读取,下面我们要在init.lua中读取这些数据,在init阶段读取,在content阶段的app.lua中读取这个args结构:
init.lua
local buffer = require "buffer"
local bjson = require "utils.bjson"
local json_text = bjson.loadf("./app/data/rules/testcase", env)
local t = bjson.decode(json_text)
buffer.sett("rule", t)
buffer.set("candylab", "Candylab:Blues")
--这是针对读取args规则的三句新加代码
local json_text = bjson.loadf("./app/data/rules/args.rule", env)
local t = bjson.decode(json_text)
buffer.sett("init_args", t)
app.lua
app:get("/xwaf_rules", function(request,id)
meta = buffer.gett("init_args")
ngx.say(bjson.pprint(meta))
end)
我们要做数据过滤,而且是基于正则的,所以在项目最开始阶段,直接引入了XWAF的规则文件。在content阶段的读取的这些数据,在init阶段同样可以读取。
而下面的数据碰撞就是针对这个args规则进行演示的,我们继续在content阶段,用一个GET方法请求模拟这个WAF规则命中的过程,不选POST而选GET,因为GET取参数简单,便于集中经历说明规则进行简单的比较,而不是把重点放在解析POST过来的参数和内容上。
app:get("/greatball", function(request,id)
meta = buffer.gett("init_args")
ngx.say(bjson.pprint(meta))
ngx.say(request.params.cmd_url)
end)
我们创建一个有greatball的请求,我们简单的模拟一些这个请求数据与WAF规则对比的过程。在这个方法里,我们同时取得了,url和args这个规则所有的数据,下面就是按什么样的方式进行数据配对了。
PS:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。