modsecurity 不包含自定义 REDQUEST_HEADER_NAMES

modsecurity 不包含自定义 REDQUEST_HEADER_NAMES

尝试建立一条规则,对任何不包含标头 X-CFKey 且与 X-CFKey 的特定项匹配的传入流量执行 403 处理。

我已成功让 modsecurity 测试 X-CFKey 值,但当标头完全缺失时会失败。我正尝试使用 !@contains 测试当前标头的缺失情况。我能够让 @contains 可预测地通过,尽管 !@contains 匹配所有内容。

SecRule REQUEST_HEADERS_NAMES "!@contains x-cfkey" \ "id:52,log,deny,status:403,t:lowercase,msg:'Does not contain header X-CFKey'"

我在这里忽略了什么,为什么!如此难以预测?

答案1

想象一下,您不久前已经解决或解决了这个问题,但刚刚发现了这个问题,所以我想我会回答,以防您或其他人想知道。

它遍历每个名​​称,并且每个名称都不包含匹配的 x-cfkey。对双重否定感到困惑了吗?:-)

正确的规则书写方式如下:

SecRule &REQUEST_HEADERS_NAMES:x-cfkey "@eq 0" \
    "id:52,log,deny,status:403,t:lowercase,msg:'Does not contain header X-CFKey'"

请参阅此处的类似检查以了解 Cookies:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#REQUEST_COOKIES_NAMES

相关内容