Wordpress 这个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); } } 有人能解释一下这

在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);
  }
}
有人能解释一下这是怎么回事吗?我试过用谷歌搜索它,但我不懂


我想确保不可能有人仅仅创建一个包含垃圾的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散列
甚至都不用(仅在获取/存储缓存中的项目时使用)