使用 ModSecurity 和 lua 脚本阻止请求

使用 ModSecurity 和 lua 脚本阻止请求

我有通过 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,但阻止功能并未发生。是否明显缺少了某些内容?任何帮助都将不胜感激。

干杯

答案1

尽管你可能认为它block实际上并没有阻止请求。你需要使用deny它。

原因是,这block是一个特殊定义的操作,您可以定义如何处理它。当规则被阻止时,您可以拒绝、仅记录或重定向到错误页面。这是使用 SecDefaultAction 设置的,默认是通过规则,如下所示:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecDefaultAction。虽然这似乎没有什么意义,但它也允许你做类似的事情在 OWASP CRS 中轻松打开或关闭异常评分

因此,请将您的 SecRuleScipt 更改denyblock

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"

请参阅此处了解更多详细信息blockhttps://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#block

相关内容