我有一些文本区域被张贴回来并使用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”