patch 20200119 修正url 白名单 为 强匹配防止利用绕过

说明:
1.whiteurl 规则 从\. 开始匹配的静态文件名相当于排除此扩展名的静态文件,如果是URL动态路径带?的路径里包含静态文件名不生效
2.例如原captcha-waf\.html规则,修改后表示从网站根目录下captcha-waf.html文件符合规则,如果文件在/xxx/captcha-waf.html下则不符合规则,也就是修改后从根目录下从头开始匹配,防止利用绕过。
3.可能带来的其他问题目前测试还未知
pull/6/head
174001602 2020-01-19 20:57:32 +08:00 committed by GitHub
parent 40dcd12654
commit 38521f794e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 2 deletions

View File

@ -49,8 +49,20 @@ function white_url_check()
local REQ_URI = string.lower(ngx.var.request_uri) local REQ_URI = string.lower(ngx.var.request_uri)
if URL_WHITE_RULES ~= nil then if URL_WHITE_RULES ~= nil then
for _,rule in pairs(URL_WHITE_RULES) do for _,rule in pairs(URL_WHITE_RULES) do
if rule ~= "" and rulematch(REQ_URI,string.lower(rule),"jo") then if rule ~= "" then
return true local REQ_URI_LEN = string.len(REQ_URI)
local rule_str = string.sub(rule,1,2)
local from, to, err = rulematch(REQ_URI,string.lower(rule),"jo")
if rule_str == "\\." then
local wfrom, wto, werr = rulematch(REQ_URI,"%?","jo")
if from and REQ_URI_LEN == to and wfrom == nil then
return true
end
elseif from and rule_str == "\\/" and from == 1 then
return true
elseif from and from == 2 then
return true
end
end end
end end
end end