wordpress - 这个 vcl_hash 函数有什么作用?

标签 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);
  }
}

有人可以解释一下这是什么吗?我曾尝试使用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/

相关文章:

javascript - 将表单数据和操作发送到 wordpress admin-ajax.php

html - 如何更改元素样式颜色

用于查找 Web 服务器名称的 PHP 脚本

varnish - 使 Varnish 成为代理而不重定向

caching - 是否可以根据 Varnish 中后端响应的大小来阻止缓存?

php - 从 wordpress 函数获取结果 SQL

apache - 如何修复 htaccess 中错误的重定向 url 301?

php - ESI 是阻塞的还是非阻塞的?

nginx - 特定数量的请求后,在Varnish-Cache中缓存资源

wordpress - 产品图片不显示(Woocommerce)