ModSecurity 阻止请求中的特定字符串

Far*_*han 3 mod-security apache-2.2

我想要一个 ModSecurity 规则,如果它包含特定字符串,它会阻止对任何 url 或任何正文请求 Post/Get 的访问。

例如我想阻止这个字符串:“km0ae9gr6m”

我有这个规则,但它似乎不起作用。

SecRule ARGS "km0ae9gr6m" "log,deny,msg:'Access Denied'"

qua*_*nta 8

您使用的是哪个 ModSecurity 版本?ARGS变量仅包含版本 1.X 中的QUERY_STRING+ POST_PAYLOAD。如果您运行的是 2.X 版,则按照上述规则,使用以下请求进行测试:

http://domain.com/a?b=km0ae9gr6m
Run Code Online (Sandbox Code Playgroud)

您会在以下内容中看到类似的内容audit_log

[modsecurity] [client x.x.x.x] [domain domain.com] [302] [/20120813/20120813-1226/20120813-122624-70QXqH8AAAEA AEucDbkAAAAA] [file "/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf"] [line "305"] [msg "Access Denied"] Access denied with code 403 (phase 2). Pattern match "km0ae9gr6m" at ARGS:b.

在 ModSecurity 2.x 中,ARGS扩展到单个变量。所以,试试这个:

SecRule REQUEST_URI|ARGS|REQUEST_BODY "km0ae9gr6m" "log,deny,msg:'Access Denied'"
Run Code Online (Sandbox Code Playgroud)