使用ModSecurity和lua脚本阻止请求

我有networkingstream量通过ModSecuritystream动。

在ModSecurityconfiguration中,我正在调用一个Lua脚本,对请求string的参数进行一些简单的分析。 具体来说,它是检查跨站脚本的证据,如果存在一些证据,将阻止传入的stream量。

ModSecurity规则引擎configuration如下:

SecRuleEngine On SecRuleScript "/path/to/lua/script/detectXSS.lua" "block" 

lua脚本的一个说明性例子如下:

 function main() -- Retrieve script parameters local d = m.getvars("ARGS", { "lowercase", "htmlEntityDecode" } ); -- Loop through the parameters for i = 1, #d do -- Examine parameter value. if (string.find(d[i].value, "<script")) then return ("Suspected XSS in variable " .. d[i].name .. "."); end end -- Nothing wrong found. return nil; end 

尽pipe可以检测并返回XSS,但阻塞function不会发生。 有明显的缺失吗? 任何帮助将不胜感激。

干杯

尽pipe你可能认为block不实际阻止请求。 你需要使用deny

这是block的原因是一个特别定义的行动,然后你可以定义如何处理。 当规则阻止时,您可以拒绝,只是login或redirect到错误页面。 这是用SecDefaultAction设置的,默认是传递规则,如下所示: https : //github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecDefaultAction 。 虽然这看起来没有什么意义,但它也允许您在OWASP CRS中轻松地打开或closuresexception评分 。

所以要么改变你的SecRuleScipt来deny而不是block

 SecRuleEngine On SecRuleScript "/path/to/lua/script/detectXSS.lua" "deny" 

或者,可以设置默认的block操作来拒绝:

 SecRuleEngine On SecDefaultAction "phase:2,deny" SecRuleScript "/path/to/lua/script/detectXSS.lua" "block" 

关于block更多细节,请看这里: https : //github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#block