我想匹配ModSecurity中名为usr/bin/的参数。
我测试了下面的规则,并确认它匹配(假设参数的值是abc):SecRule ARGS:/usr\\\/bin\\\// "@streq abc" "id:123,status:400,deny"
据我所知,这是可行的,因为在模式被输入正则表达式引擎之前,\\\
被简化为\\
(我认为这只是C/C++的一个特性,PHP的行为也是如此)。然后,正则表达式引擎将\\
解释为单个\
,这反过来又会转义后面的/
,因此不会发生未转义的错误。
如果是这样的话,我希望下面的规则也能匹配:SecRule ARGS:/usr\\\\/bin\\\\// "@streq abc" "id:123,status:400,deny"
但我的测试结论是它没有。为什么第二条规则不匹配?我对反斜杠的理解是正确的吗?
1条答案
按热度按时间k7fdbhmy1#
据我所知,这是可行的,因为在模式被输入到正则表达式引擎之前,\被简化为\(我认为这只是C/C++的一个特性,PHP的行为也是如此)。
不,这是一个引擎(ModSecurity)功能。请查看文档:
SecRule ARGS:/^id_/ dirty "id:11"
因此,
/.../
表示法用于表示集合中的正则表达式。如果是这样的话,我希望下面的规则也能匹配:
SecRule ARGS:/usr\\/bin\\// "@streq abc" "id:123,status:400,deny"
但我的测试结论是它没有。为什么第二条规则不匹配?我对反斜杠的理解是正确的吗?
请再次检查您的结果和其他设置。这条规则对我有效。我在测试环境中设置了这个规则,并尝试了一下:
在我的日志中有这样几行:
error.log:
在debug.log中:
所以我认为你的规则是你所期望的。
我也尝试了这个请求的规则:
这也同样有效。