Cookie前缀怎么让Cookie更安全
就像 SameSite-cookies 我现已重视 Cookie 前缀很长时刻了。经过测验我发现在最新版的 Chrome-dev 浏览器中 Cookie 前缀现已得到了支撑。那么现在是时分写一短篇博客来介绍什么是 Cookie 前缀以及 Cookie 前缀是怎么维护用户的。
修正 Cookie,而非其特点!
Cookie 前缀是 HTTP 协议一个新的机制,其扩展了 Cookie 的特征,经过简略要求具有特定前缀的 Cookie 只能在满意特定规范的景象下才干运用。
咱们改变了 Cookie 的实践称号而不是添加其他特点,这样今后服务器在接收到称号过错的 Cookie 时会直接回绝承受。
这两个前缀分别为 __Secure- 和 __Host- ,它们会被用作 Cookie 称号的前缀而非数值。举个比如,假如你的网站有一个名为 sid 的 Cookie,那么为了发挥 Cookie 前缀的优势,你应当将称号改为 __Secure-sid。
__Secure 前缀
假如 Cookie 称号带有 __Secure- 前缀,那么它必定具有 Secure 特点并且被设置为来源于一个安全的源。
__Host- 前缀
假如 Cookie 称号带有 __Host- 前缀,那么它也必定会具有 Secure 特点,而不应当具有 Domain 特点,由于 Cookie 只能作用于同源的网站,并且有必要设置 Path=/。
译者注(来自 Chrome 的解说):
__Secure-:告知浏览器需求设置 Secure 特点。
__Host-:告知浏览器一起需求设置 Path=/ 和 Secure 特点,一起不应当设置 Domain 特点。
就这么多,这些改动易于完成和运用。但这样真的能够让 Cookie 变的愈加安全吗?
愈加安全的 Cookie 前缀
Cookie 前缀旨在针对现有 Cookie 的一些问题进行改善,其方针是约束来自安全域的 Cookie 被作用在不安全的域上,反之亦然。
相同的,它也能够抵挡 Cookie 注入,由于只要 __Host- 的源能够设置 Cookie。
假如你的网站运用了 HTTPS 并依靠 Cookie 来完成认证,那么能够考虑在你的 Cookie 里添加 __Host- 特点以使网站比曾经愈加安全。
弥补:
作者在 Twitter 上收到一个问题,他觉得本文或许没有论述清楚,运用 Cookie 前缀的首要意图在于运用 Cookie 称号替代 Cookie 特点。
你能够经过拜访这个 POC 来体会下:http://sweha.xxx/k.php
c@c# curl -sI http://sweha.xxx/k.php | grep ^Set
Set-cookie: __Secure-lol=foo;Domain=sweha.xxx
在 Chrome-dev 浏览器中你会发现 Cookie 没有被设置,由于来自不安全的源。而在 Firefox 浏览器中却会被设置 Cookie:
译者弥补
JavaScript 示例:
//支撑 __Secure 前缀的浏览器会回绝以下衔接,由于短少 Secure 特点
document.cookie = '__Secure-invalid-without-secure=1';
//一切浏览器包含支撑 __Secure 前缀的浏览器都会承受以下衔接,由于设置了 Secure 特点
document.cookie = '__Secure-valid-with-secure=1; Secure';
//支撑 __Host 前缀的浏览器会回绝以下衔接,由于短少 Secure 和 Path=/ 特点
document.cookie = '__Host-invalid-without-secure-or-path=1';
//支撑 __Host 前缀的浏览器会回绝以下衔接,由于短少 Path=/ 特点,即便设置了 Secure 特点
document.cookie = '__Host-invalid-without-path=1; Secure';
//一切浏览器包含支撑 __Host 前缀的浏览器都会承受以下衔接,由于一起包含了 Secure 和 Path=/ 特点
document.cookie = '__Host-valid-with-secure-and-path=1; Secure; Path=/';