我们网站上的图像标记了 modsec 规则,我正在尝试仅针对该事件添加规则例外。标记字符串开头的数字是会话编号,因此我在我的规则中添加了一个正则表达式。
我尝试过各种排列,但没有任何乐趣,希望得到一些建议。
阻止的 URI: https://www.website.com/application/login?0--preLoginHeaderPanel-companyLogo
Modsec 日志片段: [文件“/usr/share/modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf”] [行“65”] [id“942100”] [msg“通过libinjection检测到SQL注入攻击” "] [data "匹配数据:在 ARGS_NAME:0--preLoginHeaderPanel-companyLogo: 0--preLoginHeaderPanel-companyLogo 中找到 1c"]
尝试的异常(在 apache.conf 内): SecRuleUpdateTargetById 942100 !ARGS_NAMES:'[0-9][0-9]?--preLoginHeaderPanel-companyLogo'
核心规则集值班开发人员在这里。规则 942100 是我们的“LibInjection”规则之一。 LibInjection 非常不透明(它是第三方库/运算符),因此您认为规则排除是解决此问题的方法是正确的。
在此上下文中正则表达式的使用遵循特定的形式。它们需要夹在正斜杠内,如下所示:
SecRuleUpdateTargetById 942100 "!ARGS_NAMES:/^[0-9][0-9]?--preLoginHeaderPanel-companyLogo/"
我在正则表达式的开头添加了一个起始锚点。您可能想考虑最后锚定是否也是一个好主意。
有关更多示例和信息,我们在这里有一些很棒的文档:https://coreruleset.org/docs/concepts/false_positives_tuning/#support-for-regular-expressions