PHP 和文本区域触发 Mod_Security

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"]

我的问题是……我还能在我的代码中做更多的事情吗?或者我可以在 mod_security 中做出一个小的例外吗?我不想禁用整个规则,因为它很重要,但同时,我需要用户能够在文本区域中输入数据并返回(如果他们愿意的话)。

谢谢。

答案1

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

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

答案2

虽然晚了点,但是......

您应该有一组自定义规则,它们要么在规则集之前,要么在规则集之后,通常,如果您要删除规则或路由,您可以在 CRS 编号较低的文件中执行此操作。对规则集的修改发生在CRS 文件。

我们分别使用 10 和 65。

您应该尝试做的是为特定的 ARG 创建排除,而不是完全关闭规则,因为这会删除保护。

例如 SecRuleUpdateTargetById 960024 !ARGS:notes

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

提示:单个字段不需要双引号,但多个字段需要 - “!ARGS:notes, !ARGS:q”

相关内容