我想要一个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会在检测到服务器的过程中检测到它,并会阻止它。