【问题标题】:Meaning of exclamation mark in ModSecurity RulesModSecurity规则中感叹号的含义
【发布时间】:2019-02-05 00:20:47
【问题描述】:

谁能帮我解释一下感叹号在 ModSecurity 规则中的作用,如下所示:

SecRuleUpdateTargetById 932100 "!ARGS:foo"

在阅读和制定该规则时,人们如何阅读和解释 "!ARGS:foo""ARGS:foo"

在测试差异时,带有感叹号的规则通过在存在该参数时不应用该规则 ID 给我想要的结果。

我在https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-(v2.x)#args_names 处参考了文档,并尝试从其他示例中收集我可以收集到的内容,但可能有不同的措辞来分解它。

非常感谢您的帮助!

----- 编辑 ------
感谢您到目前为止的解释。

BEFORE排除项中写的“等价”规则怎么没有“感叹号”?

SecRule REQUEST_URI "@streq /my/endpoint" \
    "id:0003, \
    phase:2, \
    pass, \
    nolog, \
    ctl:ruleRemoveTargetById=931130;ARGS:foo"

【问题讨论】:

    标签: mod-security


    【解决方案1】:

    表示“不”,在本例中用于排除某些参数。

    所以如下:

    SecRuleUpdateTargetById 932100 "!ARGS:foo"
    

    更改规则 932100 以查看规则中指定的所有目标,参数 foo 除外。

    这通常是因为参数foo 经常导致此规则错误地触发。因此,您的选择是完全关闭此规则,或排除此参数被该规则检查。后者通常是更好的选择,因为这意味着该规则仍然适用于其他论点,因此仍然证明了它的大部分保护。

    BEFORE excludes [(ctl:ruleRemoveTargetById)] 中写的“等价”规则怎么没有“感叹号”?

    那是因为它们不是严格“等价的”。 SecRuleUpdateTargetById 通过添加到规则来更新目标,而ctl:ruleRemoveTargetById 从目标中删除位。如果有SecRuleRemoveTargetById,那么它们会更等价,但没有。事实上ModSecurity Reference manual 甚至解决了这个问题:

    1. ruleRemoveTargetById - 由于此操作仅用于删除目标,因此用户不需要使用 char !在目标列表之前。

    为什么他们决定实施 ctl:ruleRemoveTargetById 而不是 ctl:ruleUpdateTargetById,我不能说。

    【讨论】:

    • 谢谢你的回答,巴里 - 这为我清除了它。我根据您的回复编辑了我的原始问题并对其进行了扩展。
    • 更新了我的答案以解决您问题的额外部分。
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 2012-07-07
    • 2012-11-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多