PHP和文本区域触发Mod_Security

我有一些文本区域被张贴回来并使用PHP / MySQL存储。 但是,如果用户在文本区域按下回车换行,则mod_security将使用以下日志条目来阻止它:

Pattern match "\\W{4,}" at ARGS:notes. [file "/etc/httpd/modsecurity-crs/base_rules/modsecurity_crs_40_generic_attacks.conf"] [line "37"] [id "960024"] [rev "2"] [msg "Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters"] [data "Matched Data: \x0d\x0a\x0d\x0a found within ARGS:notes: This is Test Request #5\x0d\x0a\x0d\x0aThanks"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"] 

我的问题是这个….还有什么我可以做我的代码或一个小的exception,我可以在mod_security? 我不想禁用整个规则,因为它很重要,但同时,我需要用户能够在文本区域input数据,如果他们愿意的话可以返回。

谢谢。

最简单的方法是禁用接收POST的URL的规则:

 <LocationMatch /URL/path/to/application> SecRuleRemoveById 960024 </LocationMatch> 

好吧,但是….

您应该拥有一组自定义规则,这些规则要么在规则集之前,要么遵循规则集,一般情况下,如果要删除规则或路由,请在CRS编号较低的文件中执行。 规则集的修改发生 CRS文件之后。

我们分别使用10和65。

你应该试图做的是为特定的ARG创build一个排除,而不是完全closures该规则,因为这会消除保护。

例如SecRuleUpdateTargetById 960024!ARGS:注释

https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecRuleUpdateTargetById

陷阱:单个字段不需要双引号,但是有多个字段 – “!ARGS:便签,!ARGS:q”