匹配多个事物的复杂 SecRule

Complex SecRule that matches more than one thing

我是使用 mod_security2 的新手。我只使用了大约 3 周。

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

  1. 如url,域名后以/SOMETHING
  2. 开头
  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. 或者参数名称恰好是 "filters"(不管它有什么值)
  6. 然后ctl:ruleRemoveTargetById=981173

我认为 Reference Manual 缺少的是 SecRule 的一个复杂示例的解释。可能是我找不到,这样的话还请见谅,请指点一下。

我使用的是 2.9.0 版本

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

既然我已经在写这个请求帮助,也许有一个捷径可以方便地知道:我有很多规则要写,如果域名后面的 url 以 /SOMETHING,有没有简单的方法来处理它们?

提前致谢。

我想我知道怎么做了。

    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"

我说的对吗? 有什么意见吗?

发现很难准确理解您想要什么。

也许可以为所有这些编写一条链式规则,但编写多条规则可能更容易和更具可读性。

我建议您查看 REQUEST_URI,其中包含请求的资源和参数。

SecRule REQUEST_URI "^/SOMETHING.*\?(.*&)+(.*date.*|.*timestamp.*|lastLogon)=[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}(&.*)+$" "id=12345,ctl:ruleRemoveTargetById=981173"

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

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

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

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

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

工作规则是:

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.[=14= 中才会执行]

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