谁能帮我解释感叹号确实在这样的ModSecurity的规则是什么:
SecRuleUpdateTargetById 932100 "!ARGS:foo"
有人如何阅读和解释"!ARGS:foo"
VS "ARGS:foo"
阅读和起草这一规则是什么时候?
当测试差别,用感叹号的规则给我,我想,当这样的说法是不存在应用该规则标识的结果。
我在这里引用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"
它的意思是“不”,并在这个例子中是用来排除某些参数。
所以下面:
SecRuleUpdateTargetById 932100 "!ARGS:foo"
更改规则932100看看除了参数foo
规则中指定的所有目标。
这通常是因为参数foo
常常导致此规则,以便正确。因此,您的选择是完全关闭该规则关闭,或者从该规则被检查排除这种说法。后者通常是更好的选择,因为它意味着规则仍然地方的其他参数,因此仍证明其大部分的保护。
怎么来的“等效”原则写在BEFORE排除[(CTL:ruleRemoveTargetById)不具有“感叹号”?
那是因为他们没有严格的“等价”。 SecRuleUpdateTargetById
通过向规则更新目标,而ctl:ruleRemoveTargetById
从目标中删除位。如果有一个SecRuleRemoveTargetById
那么他们会更等同,但是没有。事实上,即使ModSecurity Reference manual解决了这一问题:
- ruleRemoveTargetById - 因为这个动作是用来只是删除目标,用户不需要使用字符!之前的目标列表。
他们为什么决定实施ctl:ruleRemoveTargetById
而不是ctl:ruleUpdateTargetById
,我不能说。