我想写一条规则,只允许特定的URL。我只有两个网址 1:abc.com/configuration/ 2:abc.com/update /
SecRule REQUEST_URI"!@ startsWith / configuration" \ " id:700003,阶段:1,记录,拒绝,消息:'访问不同的URL'"
SecRule REQUEST_URI" @beginsWith / update" \ " id:700004,阶段:1,记录,传递,消息:'更新访问的URI'"
如何合并这两个规则,以便可以覆盖其他规则?
由于
答案 0 :(得分:1)
你可以在这里做很多事情。
By default a regex is used to match in ModSecurity所以你可以写一个规则来覆盖两个URI,如果不匹配则阻止:
SecRule REQUEST_URI "!\/(configuration|update)\/" "phase:1,id:700003,block
您可以使用@pm:
执行相同操作SecRule REQUEST_URI "!@pm \/configuration\/ \/update\/" "phase:1,id:700003,block
或者您可以使用skipAfter,这将允许您列出不同规则中的网址,然后有一个阻止规则,如果上述任何规则匹配,则会跳过该规则:
SecMarker BEGIN_VALID_URL_CHECK
SecRule REQUEST_URI "!@beginsWith /configuration" \ "id:700003, phase:1,log,skipAfter:END_VALID_URL_CHECK,msg:'Different URL Accessed'"
SecRule REQUEST_URI "@beginsWith /update" \ "id:700004, phase:1,log,skipAfter:END_VALID_URL_CHECK,msg:'Update URI accessed'"
SecRule REQUEST_URI "." \ "id:700005, phase:1,log,block,msg:'Another URI accessed - blocking'"
SecMarker END_VALID_URL_CHECK
或者您可以allow与那些停止在ModSecurity中处理此请求的模式相匹配的规则(这可能是一个不好的选择,因为它会跳过您配置中稍后定义的任何其他ModSecurity规则,但我会这样做包括它为了完整起见):
SecRule REQUEST_URI "!@beginsWith /configuration" \ "id:700003, phase:1,log,allow,msg:'Different URL Accessed'"
SecRule REQUEST_URI "@beginsWith /update" \ "id:700004, phase:1,log,allow, msg:'Update URI accessed'"
SecRule REQUEST_URI "." \ "id:700005, phase:1,log,block, msg:'Another URI accessed - blocking'"