ModSecurity阻止请求中的特定string

我想要一个ModSecurity规则,阻止访问任何URL或任何身体请求Post / Get,如果它包含一个特定的string。

例如,我想阻止这个string:“km0ae9gr6m”

我有这个规则,但它似乎没有工作。

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

你正在使用哪个ModSecurity版本? ARGSvariables只包含版本1.X中的QUERY_STRING + POST_PAYLOAD 。 如果您运行的是版本2.X,则按照以上规则,使用以下请求进行testing:

 http://domain.com/a?b=km0ae9gr6m 

你会在audit_log看到类似这样的内容:

[modsecurity] [client xxxx] [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扩展为单个variables。 所以,试试这个:

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

我唯一缺less的就是处理阶段,在这个阶段必须使用这个规则来使其工作。 所以实际的规则在这里。

 SecRule REQUEST_URI|ARGS|REQUEST_BODY "km0ae9gr6m" "phase:4,log,deny,msg:'Access Denied'" 

通过这个规则,您可以轻松阻止任何types的响应,您不希望任何用户看到。 Modsecurity会在检测到服务器的过程中检测到它,并会阻止它。