-
Notifications
You must be signed in to change notification settings - Fork 1
/
access.lua
84 lines (79 loc) · 1.94 KB
/
access.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
local Util = require("util")
local Waf = require("waf")
local headers = ngx.req.get_headers()
local ip = Util:getRealIp(headers)
local uri = ngx.unescape_uri(ngx.var.request_uri)
-- waf拦截入口
local function waf_main()
-- 判断是否开启waf请求拦截
if not _conf.isWafEnable then
return
end
-- 白单相关模块
-- 检查ip白名单
if Waf:ipInWhiteList(ip, uri) then
return
end
-- 检查url白名单
if Waf:urlInWhiteList(ip, uri) then
return
end
-- 检查域名白名单
if Waf:siteInWhiteList(ip, uri) then
return
end
-- cc防御相关模块
-- 域名限速检测
if Waf:limitDomainModule(ip, uri) then
return
end
-- ip限速检测
if Waf:limitIpModule(ip, uri) then
return
end
-- cc防御检测
if Waf:limitReqModule(ip, uri) then
return
end
-- 黑名单相关模块
-- 检查ip黑名单
if Waf:ipInBlackList(ip, uri) then
return
end
-- 检查url黑名单
if Waf:urlInBlackList(ip, uri) then
return
end
-- 检查域名黑名单
if Waf:siteInBlackList(ip, uri) then
return
end
-- 检查ua黑名单
if Waf:uaInBlackList(ip, uri) then
return
end
-- 注入防御相关模块
-- 判断是否开启post参数检查,如果有开启则获取post参数
local postArgs = nil
if _conf.antiInjectPostOn and ngx.var.request_method == "POST" then
ngx.req.read_body()
postArgs = ngx.req.get_post_args()
end
-- sql注入安全防御
if Waf:sqlInjectList(ip, uri, postArgs) then
return
end
-- xss注入安全防御
if Waf:xssInjectList(ip, uri, postArgs) then
return
end
-- cmd注入安全防御
if Waf:cmdInjectList(ip, uri, postArgs) then
return
end
-- ref注入安全防御
if Waf:refInjectList(ip, uri) then
return
end
end
waf_main()