在几个用于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);
}
}
有人可以解释一下这是什么吗?我曾尝试使用Google谷歌搜索功能,但没有遵循。
我想确保不可能只有一个人在其中创建一个带有垃圾的cookie并将其命名为
PHPSESSID
或类似的东西,然后魔术地认为他们已经登录了吗?
最佳答案
这将检查用户是否具有名为其中一个的Cookie(每个|
是regex OR运算符,因此它可以与其中任何一个匹配)。如果存在具有该名称的cookie,则我们对cookie的值进行哈希处理,以便用户获得自己的缓存。这是通过使用hash_data
函数实现的,该函数将参数添加到请求的缓存键中(因此,您将req.http.Cookie
的内容添加到缓存键中)。
这样做的原因是,登录用户看不到注销用户的页面缓存版本。
这是非常安全的,尽管我个人不会这样做,因为它确实会带来一些问题(例如,用户注销并使其 session 无效,但是攻击者可以通过复制请求 header 从其个人资料页面中看到缓存的页面) 。
更好的选择是根本不缓存那些页面(100%安全)。您可以将其放在vcl_recv
函数中:
sub vcl_recv {
if (req.http.Cookie ~ "wp-postpass_|wordpress_logged_in_|comment_author|PHPSESSID") {
return (pass);
}
}
关于wordpress - 这个 vcl_hash 函数有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330134/