问题描述
我想创建一个排除项以禁用系统中的特定规则 (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/。