关于ngx.req.get_post_args()问题

xuanzi1982 发布于 2019/08/30 11:46
阅读 980
收藏 0

参考网上其他人的文章,写了个lua脚本对特殊参数进行屏蔽,如下:

ngx.req.read_body()
local args, err = ngx.req.get_post_args()
if err == "truncated" then
        -- one can choose to ignore or reject the current request here
end
if not args then
        ngx.say("failed to get post args: ", err)
        return
end
for key,val in pairs(args) do
        if key == "hacker" then
                hxarg = "deny"
                break
        end
end
if hxarg then
        return ngx.exit(ngx.HTTP_GONE)
end

测试的时候没问题,遇到参数为hacker的请求都返回410。但是,到一定访问次数以后,就出现问题。写了死循环访问一千次:

for ((i=1; i<=1000; i ++))

do

    curl -d "hacker=test$i" http://www.test.com/abc

done

上面的1000次访问后,再次访问:curl -d "abc=test1111111" http://www.test.com/abc .也返回410。

把上面的lua脚本改了下

ngx.req.read_body()
local args, err = ngx.req.get_post_args()
local data = ngx.req.get_body_data()
if err == "truncated" then
        -- one can choose to ignore or reject the current request here
end
if not args then
        ngx.say("failed to get post args: ", err)
        return
end
for key,val in pairs(args) do
        if key == "hacker" then
                var1 = key
                var2 = val
                hxarg = "deny"
                break
        end
end
if hxarg then
        return ngx.say("deny"," ",var1," ",var2," ",data)
end

再次运行上面的一千次请求,然后访问结果如下:

curl -d "abc=s12321323" http://www.test.com/abc

deny hacker 1000 abc=s12321323

说明此时,ngx.req.get_body_data()能取到参数,而ngx.req.get_post_args()取不到参数,这就很费劲了,网上搜了很多,也没看到ngx.req.get_post_args()这个函数的特性的。

加载中
0
xuanzi1982
xuanzi1982
该评论暂时无法显示,详情咨询 QQ 群:912889742
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部