在清漆 4 中的 cookie 上设置 HTTPOnly 标志

Setting HTTPOnly flag on cookie in varnish 4

我们的基础设施中有一个设备生成的 cookie,我们无权访问该设备的配置,因此无法在它直接生成的 cookie 上设置 HTTPOnly 标志。

我们在这个设备前面有一个 varnish 4 缓存,是否可以在那里的 cookie 上设置 HTTPOnly 标志?如果可以怎么办?

如果您的后端只为每个响应设置一个 Set-Cookie header,则可以在 vcl_deliver 期间轻松地向 header 添加 HttpOnly 标志子程序。您只需要使用 regsub().

重写 resp.http.Set-Cookie

但是,如果在单个响应中可能出现多个 Set-Cookie header,则先前的解决方案无效。您可以考虑类似的方法,首先使用 std.collect() 将所有 Set-Cookie header 合并为一个 comma-delimited Set-Cookie header,然后重写使用 regsuball() 合并 header 以添加 HttpOnly 标志。但是,合并 Set-Cookie header 是个坏主意。一些浏览器不喜欢合并的 header 并且更喜欢每个 Set-Cookie header 单独发送。

总结:当单个响应中可能有多个 Set-Cookie header 时,您无法在 VCL 中添加 HttpOnly 标志。那只能执行using a VMOD。我不知道有任何 VMOD 可以满足您的需求,但您可以轻松实现它。