我有网络流量流经 ModSecurity。
在 ModSecurity 配置中,我正在调用一个 Lua 脚本,该脚本正在对请求字符串的参数进行一些简单的分析。具体来说,它正在检查跨站点脚本的证据,如果存在一些证据,它将阻止传入的流量。
ModSecurity规则引擎配置如下:
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
虽然 XSS 可以被检测到并返回,但是阻塞功能并没有发生。有什么明显的缺失吗?任何帮助将不胜感激。
干杯
尽管您可能认为
block
实际上并没有阻止请求。你需要使用deny
它。这样做的原因
block
是一个特殊定义的操作,然后您可以定义如何处理。当您的规则被阻止时,您可以拒绝、仅记录或重定向到错误页面。这是使用 SecDefaultAction 设置的,默认设置是通过如下所示的规则:https ://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecDefaultAction 。虽然这似乎没有意义,但它还允许您在 OWASP CRS 中轻松地打开或关闭异常评分等操作。因此,要么将您的 SecRuleScipt 更改为,
deny
而不是block
:或者将默认
block
操作设置为拒绝:有关更多详细信息,请参见此处
block
: https ://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#block