尝试建立一条规则,对任何不包含标头 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