Modesecurity:为 REQUEST_HEADERS:Transfer-Encoding 创建 SecRule 排除

问题描述

我想创建一个排除项以禁用系统中的特定规则 (ID:920180)。我应该如何在 REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf 中编写语法

这里是我的排除项,但我不确定是否完全覆盖以禁用它:

Secrule REQUEST_HEADERS:transfer-encoding "@eq 0" "id:91001,phase:1,msg:'POST without Content-Length or transfer-encoding headers',pass,nolog,noauditlog,ctl:ruleRemovebyID=920180"

我想对此应用排除的错误

ModSecurity: Warning. Matched "Operator `Eq' with parameter `0' against variable `REQUEST_HEADERS:transfer-encoding' (Value: `0' ) [file "/etc/Nginx/modsecurity/coreruleset/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "222"] [id "920180"] [rev ""] [msg "POST without Content-Length or transfer-encoding headers"] [data "HTTP/1.1"] [severity "4"] [ver "Owasp_CRS/3.3.0"] [maturity "0"] [accuracy "0"] [hostname "127.00.00.00"] [uri "/sample/api"] [unique_id "3562345"] [ref "v7,4"]

这是来自文档 ID 的实际规则: 920180 。 https://github.com/SpiderLabs/owasp-modsecurity-crs/blob/v3.0/master/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf#L280

解决方法

您的排除规则几乎是正确的。但是 & 前面的 REQUEST_HEADERS:Transfer-Encoding 不见了。

&REQUEST_HEADERS:Transfer-Encoding(带 & 号)计算 Transfer-Encoding 标头的数量。

如果没有 &(与号),Transfer-Encoding 标头的内容将与值 0 进行比较。

我不确定您是否真的想删除不存在的 Transfer-Encoding 标头的一般规则,或者您是否想将其限制为某些客户端(IP 地址、用户代理等)。但这是你的决定。我不知道你到底需要什么。

但无论如何,此排除规则现在将起作用。

顺便说一下:当前的 OWASP 核心规则集存储库是 https://github.com/coreruleset/coreruleset/