Nginx $ http_cookie如果指令模式匹配

时间:2016-07-16 14:16:51

标签: if-statement cookies nginx

所以在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

0 个答案:

没有答案