我需要一个正则表达式来检查特定参数是否在浮点范围内。例如,我希望Param仅在0.01到999.9范围内。我已经配置了以下规则,但它无法正常工作。
SecRule ARGS:Param "![0.01-999.9]" "deny,id:2200"
如果param
的值为1000,则会被拒绝,这是正确的,如果Param
的值为0,那么它将被接受,但情况并非如此。请让我知道确切的为其配置正则表达式的方法。
答案 0 :(得分:1)
这听起来像是一个商业逻辑规则 - 应该在服务器逻辑中完成,而不是mod_security,但无论如何:
范围[0..999.9]
中的浮点数是
999.9
开头的数字和所谓的可选零999.9
本身是允许的(如果范围是从右边开始)限制性最小的变体,编译成正则表达式:
^0*(?:(?!999\.9\d*$)\d{0,3}(?:\.\d*)?|999\.0*)$
^
- 字符串的开头(不确定它是否由mod-security添加)0*
- 0-n zeroes (?:...)
- 非捕获组
(?!...)
- 如果没有跟着......
999.\9
- 文字999.9
,\d*
- 0位数和$
- 字符串\d
- 数字{0,3}
- 零至三次(?:...)
- 非捕获组
\.
- 文字.
\d*
- 0-n位数?
- 可选|
- 或999\.9
- 999.9
本身0*
- 可选的零$
- 字符串答案 1 :(得分:1)
(^0\.0?[1-9]\d*|^[1-9]{1,3}\.\d+)
第一个匹配替代方案将所需数字与较小的一个匹配,第二个匹配为一个或更大但小于一千个。不匹配不包含点的数字,并且匹配999.999之类的数字,但只有小于1000的数字(这就是我想要的)。