所以在Nginx文档中有点不清楚,但似乎我们可以使用正则表达式来匹配if语句中的任何内容
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if
所以我想调整它以使其成为Nginx检查任何cookie的值。
但我的下面的字符串应该是我的理解*匹配任何cookie名称和=匹配任何cookie内容。
if ($http_cookie ~* "*=*") {
return 444;
}
但我收到错误“pcre_compile()失败:在”“的”“中没有任何重复”
我想要实现的是让nginx像WAF(Web应用程序防火墙)一样检查cookie,以确保它只包含A-Z大写字母a-z小写0-9 + - _。我的PHP应用程序是Joomla这些检查是什么,但如果我可以使用Nginx执行这些检查也很有用,因为它可以更快地拒绝请求。
编辑显示半解决问题/困境
set $block_cookie_exploits 0;
#If cookie name or contents does not contain the following
if ($http_cookie !~ "[a-zA-Z0-9\+\-\_]=[a-zA-Z0-9\+\-\_]") {
set $block_cookie_exploits 1;
}
#Block the client request
if ($block_cookie_exploits = 1) {
return 403;
}
上述配置的新问题是,如果没有cookie,它将返回403。如果你将字符放在cookie的名称或内容中,如{}则不会返回403