复杂的SecRule匹配多个事物

时间:2016-03-03 20:01:36

标签: apache mod-security2

我是使用mod_security2的新手。我只用了大约3个星期。

希望有人能告诉我如何完成以下操作。 我正在寻找一种创建规则的方法:

  1. 如果网址名称以/SOMETHING
  2. 开头,则为url
  3. 参数名称(包含datetimestamp)或(正好是lastLogon
  4. 参数值与正则表达式^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}[-+]?[0-9]{4}$
  5. 匹配
  6. 或者参数名称正是"过滤器" (无论它有什么价值)
  7. 然后执行ctl:ruleRemoveTargetById = 981173
  8. 我认为Reference Manual缺失的是SecRule的一个解释复杂的例子。也许我无法找到它,在这种情况下,请原谅我,请指出我正确的方向。

    我使用的是版本2.9.0

    也许使用chain或类似的东西?无法使其工作(因为需要布尔or)。我不知道。

    由于我已经写了这个请求帮助,也许有一个方便的小捷径:如果域名后的网址以/SOMETHING开头,我有很多要编写的规则,有没有一种简单的方法来处理它们?

    提前致谢。

3 个答案:

答案 0 :(得分:0)

我想我发现了怎么做。

    SecRule REQUEST_FILENAME "@beginsWith /SOMETHING" "phase:1,t:none,nolog,pass,ctl:ruleRemoveTargetById=981173;ARGS:filters,id:'10000'"
    SecRule REQUEST_FILENAME "@beginsWith /SOMETHING" "phase:1,chain,t:none,nolog,pass,ctl:ruleRemoveById=981173,id:'10010'"
        SecRule ARGS:/(?i)^.*date.*$/|ARGS:/(?i)^.*timestamp.*$/|ARGS:lastLogon "@rx ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}[-+]?[0-9]{4}$" "t:none"

我是对的吗? 任何评论?

答案 1 :(得分:0)

发现很难准确理解你想要的东西。

有可能为所有这些编写一个链式规则,但可能更容易编写多个规则并且更具可读性。

我建议您查看包含所请求资源和参数的REQUEST_URI

SecRule REQUEST_URI "^/SOMETHING.*\?(.*&)+(filters)=.*" "id=12346,ctl:ruleRemoveTargetById=981173"

然后为你的另一个单独规则:

SecRule REQUEST_FILENAME "^/SOMETHING.*" "id=12346,chain"
    ARGS "^filters$" "ctl:ruleRemoveTargetById=981173"

最后一条规则也可以写成:

button

关于您的其他要求,您可以在REQUEST_FILENAME与SOMETHING匹配时设置变量,然后每次检查一次。但是,每次通过上面最后一个代码片段的链式规则进行检查可能同样容易。

答案 2 :(得分:0)

工作规则是:

SecRule REQUEST_FILENAME "@beginsWith /SOMETHING" \
        "phase:1,t:none,nolog,pass,ctl:ruleRemoveTargetById=981173;ARGS:filters,id:'10000'"

SecRule ARGS:/(?i)^.*date.*$/|ARGS:/(?i)^.*timestamp.*$/|ARGS:/(?i)^lastLogin$/ \
        "@rx ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}[-+]?[0-9]{4}$" \
        "phase:2,chain,t:none,nolog,pass,id:'10010'"
    SecRule REQUEST_FILENAME "@beginsWith /SOMETING" "ctl:ruleRemoveById=981173"

我现在面临的问题是第2阶段没有在我的modsecurity_crs_15_customrules.conf配置文件中执行,只有在modsecurity.conf放置时才会执行。

我仍在为这个新问题寻找明确的解决方案。 (见:this other question