您好,我在 centos5 服务器上启用了 mod_security,其中一条规则是阻止用户在表单上发布一些文本。文本是合法的,但其中包含单词“create”和<table>
后面的 html 标记,因此会导致误报。
我收到的错误如下:
[Sun Apr 25 20:36:53 2010] [error] [client 76.171.171.xxx] ModSecurity: Access denied with code 500 (phase 2). Pattern match "((alter|create|drop)[[:space:]]+(column|database|procedure|table)|delete[[:space:]]+from|update.+set.+=)" at ARGS:body. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "352"] [id "300015"] [rev "1"] [msg "Generic SQL injection protection"] [severity "CRITICAL"] [hostname "www.mysite.com"] [uri "/node/181/edit"] [unique_id "@TaVDEWnlusAABQv9@oAAAAD"]
这是 /usr/local/apache/conf/modsec2.user.conf (第 352 行)
#Generic SQL sigs SecRule ARGS "((alter|create|drop)[[:space:]]+(column|database|procedure|table)|delete[[:space:]]+from|update.+set.+=)" "id:1,rev:1,severity:2,msg:'Generic SQL injection protection'"
我的问题是:
- 我应该怎么做才能将这条规则列入白名单或者允许它通过?
- 我应该创建什么文件以及在哪里创建?
- 我该如何改变这个规则?
- 我可以将其设置为仅允许一个域吗,因为它是该专用服务器上唯一存在问题的域,或者是否有更好的方法来排除表标签?
多谢你们
答案1
您可以使用 LocationMatch 指令禁用特定 URL 上的 ModSecurity,如下所示:
<LocationMatch "/node/181/edit">
<IfModule mod_security2.c>
SecRuleEngine Off
</IfModule>
</LocationMatch>