Modsecurity:为 REQUEST_HEADERS:Transfer-编码创建 SecRule 排除

Modesecurity: Create SecRule exclusion for REQUEST_HEADERS:Transfer-Encoding

我想创建一个排除项来禁用我系统中的特定规则 (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 headers.

的数量

如果没有 &(& 符号),Transfer-Encoding header 的内容将与值 0.

进行比较

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

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

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