在清漆 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 可以满足您的需求,但您可以轻松实现它。
我们的基础设施中有一个设备生成的 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 可以满足您的需求,但您可以轻松实现它。