libmodsecurity + owasp crs + nginx:自定义排除规则中 POST 参数名称中的连字符的正则表达式

libmodsecurity + owasp crs + nginx:自定义排除规则中 POST 参数名称中的连字符的正则表达式

modsecurity 的 paranoia_level = 3 禁止在第 2 阶段使用 owasp crs 版本 3.3.4 的规则 920272 使用 POST 有效负载(application/x-www-form-urlencoded)上传不可打印字符

但有时,它也会触发 UTF-8 编码的密码。

首次尝试停用规则 920272 有效:

SecRule REQUEST_URI "/login" \
    id:2001,\
    phase:2,\
    pass,\
    nolog,\
    ctl:RuleRemoveById=920272"

但它会停用通过 POST 上传的所有字段的保护。

目标:仅为 2 个 POST 参数停用 920272:

  • 密码
  • 隐藏密码

事情变得复杂了:

SecRule REQUEST_URI "/login" \
    id:2001,\
    phase:2,\
    pass,\
    nolog,\
    ctl:RuleRemoveById=920272;ARGS:password"

也可以。

但是参数“hidden-password”包含连字符。我尝试了几次才屏蔽掉连字符,但都没有成功。

我努力了:

ctl:RuleRemoveById=920272;ARGS:hidden-password"
ctl:RuleRemoveById=920272;ARGS:hidden\-password"
ctl:RuleRemoveById=920272;ARGS:'hidden-password'"
ctl:RuleRemoveById=920272;ARGS:^/hidden-password/"
ctl:RuleRemoveById=920272;ARGS:^/hidden\-password/$"

可能还有其他一些……

我收到的错误是:

  • "Not a number: password" 或者
  • "Expecting an action, got: \-password" 或者
  • "Expecting an action, got: 'hidden-password'"

或者与上述某条消息类似。

根据https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-%28v2.x%29#user-content-ARGS 参数名称可以是正则表达式。好的。尝试了几个(见上文)但失败了。

你知道为什么吗 ?

相关内容