Wordpress 这个vcl_散列函数做什么?
在wordpress的几个Varnish VCL示例中,我看到了以下内容:Wordpress 这个vcl_散列函数做什么?,wordpress,varnish,varnish-vcl,Wordpress,Varnish,Varnish Vcl,在wordpress的几个Varnish VCL示例中,我看到了以下内容: sub vcl_hash { # Add the browser cookie only if a WordPress cookie found. if (req.http.Cookie ~ "wp-postpass_|wordpress_logged_in_|comment_author|PHPSESSID") { hash_data (req.http.Cookie); } } 有人能解释一下这
sub vcl_hash {
# Add the browser cookie only if a WordPress cookie found.
if (req.http.Cookie ~ "wp-postpass_|wordpress_logged_in_|comment_author|PHPSESSID") {
hash_data (req.http.Cookie);
}
}
有人能解释一下这是怎么回事吗?我试过用谷歌搜索它,但我不懂
我想确保不可能有人仅仅创建一个包含垃圾的cookie,然后将其称为
PHPSESSID
或其他什么,然后神奇地认为他们登录了?这会检查用户是否有一个名为这些cookie之一的cookie(每个|
都是正则表达式或运算符,因此它可以匹配其中的任何一个)。如果存在具有该名称的cookie,则我们对cookie的值进行哈希,以便用户获得自己的缓存。这是通过使用哈希_data
函数实现的,该函数将参数添加到请求的缓存键中(因此您将req.http.Cookie
的内容添加到缓存键中)
原因是登录用户看不到来自注销用户的页面缓存版本
这是非常安全的,尽管我个人不会这样做,因为这会带来一些问题(例如,用户注销并使其会话无效,但攻击者可以通过复制请求头从其配置文件页面中看到缓存页面)
更好的选择是不缓存这些页面(100%安全)。您可以将其放入vcl\u recv
功能中:
sub vcl_recv {
if (req.http.Cookie ~ "wp-postpass_|wordpress_logged_in_|comment_author|PHPSESSID") {
return (pass);
}
}
啊哈!我真的很想知道…我有你放在我的
vcl\u recv
中的代码。所以你是说只要我在recv中通过100%的时间,我在vcl\u散列中根本不需要任何代码?没错,如果你在vcl\u recv
函数中有return(pass)
,那么vcl\u散列
甚至都不用(仅在获取/存储缓存中的项目时使用)