【问题标题】:Modesecurity: Create SecRule exclusion for REQUEST_HEADERS:Transfer-EncodingModesecurity:为 REQUEST_HEADERS:Transfer-Encoding 创建 SecRule 排除项
【发布时间】:2021-06-03 10:40:52
【问题描述】:

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

【问题讨论】:

    标签: apache owasp mod-security web-application-firewall


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 嘿@franbuehler,是的,我想在我的系统上禁用此规则。正如你所说,我更新了我的规则。 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" SecRule &REQUEST_HEADERS:Content-Length "@eq 0" "id:91002,phase:1,msg:'POST without Content-Length or Transfer-Encoding headers',pass,nolog,noauditlog,ctl:ruleRemovebyID=920180" 我写了两条规则,一条用于传输编码,另一条用于内容长度。我可以在这两条规则的一条规则中禁用它吗?
    • 此错误包含两个不同的标头。对于每个标题,我应该创建不同的规则还是只使用一个规则?另一个快速的问题。我无法弄清楚命令中的第一个 id 是什么。这是规则的唯一 id 吗?我是这么想的,我给了随机数:)
    • 如果您想在缺少 Transfer-Encoding 标头或缺少 Content-Length 标头的情况下禁用该规则,则意味着您完全禁用此规则,因为这是该规则的用途。因此,要完全禁用该规则,您可以使用:SecRuleRemoveById 920180
    • 你的意思是id:91001?这是您创建的排除规则的 ID。每个规则都必须有一个 id。它们不得与 CRS 9xxxxxx 的规则编号和其他规则编号发生冲突。在本文档中,您将找到规则 ID 范围:coreruleset.org/docs/ruleid.html。因此,这里的这一部分与您相关:“1-99,999;保留供本地(内部)使用。按您认为合适的方式使用,但不要将此范围用于分发给其他人的规则。”
    • 不客气 :-) 来自 OWASP CRS 团队的 Franziska
    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2017-07-19
    • 1970-01-01
    • 2018-10-18
    相关资源
    最近更新 更多