如何编写匹配开头特定User-Agent的ModSecurity规则?
ModSecurity规则问题修正方案
现有规则的问题点
- 缺少开头匹配锚点:你的需求是匹配User-Agent开头的指定字符串,正则必须添加
^锚定字符串起始位置,现有规则未加锚点,只会匹配任意位置出现的对应关键词,不符合需求。 - 额外注意:你配置了
t:lowercase参数,会先将User-Agent的值全部转为小写后再执行正则匹配,后续新增匹配关键词时统一使用小写即可,无需处理大小写兼容。
修正后的规则
SecRule REQUEST_HEADERS:User-Agent "@rx ^(?:yandex|daum|bad-agent name)" \ "msg:'Spiderbot blocked - UA: %{REQUEST_HEADERS:User-Agent}',id:10008,log,t:lowercase,drop,phase:1"
补充说明
ModSecurity的@rx操作符默认采用标准PCRE正则语法,你熟悉的通用正则规则都可以直接使用,无需适配特殊语法。如果需要测试规则匹配效果,可以先将drop动作改为log,deny,status:403,验证无误拦截后再调整为拦截动作。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

