ModSecurity规则中的感叹号的含义

时间:2019-02-05 00:20:47

标签: mod-security

有人可以帮我解释一下感叹号在ModSecurity规则中的作用是什么

SecRuleUpdateTargetById 932100 "!ARGS:foo"

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

当测试差异时,带有感叹号的规则通过在存在该参数时不应用该规则ID来提供所需的结果。

我已经在https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-(v2.x)#args_names处引用了文档,并试图从其他示例中收集到我可能得到的信息,但也许可以用不同的措词来分解它。

非常感谢您的帮助!

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

之前排除规则中写的“等效”规则为什么没有“感叹号”?

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

1 个答案:

答案 0 :(得分:1)

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

以下内容:

SecRuleUpdateTargetById 932100 "!ARGS:foo"

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

之所以这样做是因为参数foo通常会导致该规则错误触发。因此,您的选择是完全关闭此规则,或者从该规则中排除此参数。后者通常是更好的选择,因为这意味着该规则对于其他参数仍然适用,因此仍然证明了它的大部分保护作用。

  

在排除项[(ctl:ruleRemoveTargetById)]之前编写的“等效”规则为什么没有“感叹号”?

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

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

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