Nginx Regex检查$ http_cookie名称的MD5

时间:2016-08-22 03:52:27

标签: cookies nginx hash md5

所以我映射$ http_cookie来检查客户端发送的所有cookie,我想拦截的唯一一个cookie,以获取cookie的值是任何带有MD5 HASH的cookie。

检测MD5哈希的正则表达式是

[0-9a-f]{32}

但是当我将它添加到我的map指令时,Nginx因为正则表达式错误而无法运行。

这是我的cookie地图,这个问题是它获取所有cookie我只想要那些MD5总和。

map $http_cookie $session_id_value {
default '';
~^.*.+\=(?<session_value>[\w]+).*$ $session_value;
}

我试试这个

map $http_cookie $session_id_value {
default '';
~^.*[0-9a-f]{32}.+\=(?<session_value>[\w]+).*$ $session_value;
}

但是Nginx并不喜欢我的正则表达式。所以它错误并且不会运行。

我使用echo模块进行测试,看看我的正则表达式抓取的cookie的值,但是目前它仍然抓住第一个随机cookie,而不是带有名称的MD5哈希的cookie。

echo "Session Cookie Value : $session_id_value";
echo "httpcookie : $http_cookie";

1 个答案:

答案 0 :(得分:1)

这是语法错误。来自rewrite documentation

  

如果正则表达式包含“}”或“;”字符,则为整数   表达式应该用单引号或双引号括起来。

尝试:

map $http_cookie $session_id_value {
default '';
"~^.*[0-9a-f]{32}.+\=(?<session_value>[\w]+).*$" $session_value;
}