为啥“安全”cookie 不安全?

Posted

技术标签:

【中文标题】为啥“安全”cookie 不安全?【英文标题】:Why are "secure" cookies insecure?为什么“安全”cookie 不安全? 【发布时间】:2019-10-27 21:58:59 【问题描述】:

MDN docs on HTTP cookies 状态:

安全 cookie 仅通过 HTTPS 协议通过加密请求发送到服务器。即使使用 Secure,也不应将敏感信息存储在 cookie 中,因为它们本质上是不安全的,并且此标志无法提供真正的保护。

HTTPS 请求的请求正文和所有标头都使用 TLS 加密,包括 Set-Cookie: 响应标头和 Cookie: 请求标头。这应该可以防止第三方读取或篡改 cookie 值。

那么为什么 cookie “本质上是不安全的”?(也许 Mozilla 认为有权访问用户计算机的人能够检查他们的 cookie?)

【问题讨论】:

【参考方案1】:

为什么 cookie “固有地 不安全”?

cookie最大的问题是:它存储在用户的电脑中,导致了很多可能性。一旦将 cookie 发送给客户端,服务器就会失去对 cookie 隐私的控制。由于 cookie 数据存储在用户的计算机中,因此在以下情况下可能会泄露数据:

操作系统中的漏洞被攻击者利用。 用户代理中的漏洞被攻击者利用。 浏览器扩展可以获得读取cookies的权限(例如Chrome)。是的,会向用户显示一条通知,但很多人只是忽略该警报并点击“是”。 其他人可以在浏览器开发工具中检查 Cookie。 更多...

对于secure标志,如果您将secure cookie中的敏感信息发送到浏览器,仍然存在安全问题:

只要不设置httpOnly标志,所有恶意脚本都可以读取该cookie,并将信息发送到任何服务器。 如果domain 设置不正确,您可能会将敏感cookie 泄漏到某些接口。例如,如果secure cookie 的domain/,那么所有后端 API 都会收到敏感数据,这可能不是您想要的。

【讨论】:

这两点都很好,但它们似乎并不代表固有的不安全感。他们确实表明,单独的 Secure 指令不足以使 cookie 变得“安全”,但并不是说它不能变得安全。 @NathanLong 啊,我明白你的意思了。请检查我的更新答案。 好点。一些 web 框架可以很容易地对 cookie 内容进行加密,这样可以减少 cookie 被盗时造成的损失,但当然攻击者仍然可以冒充用户。窃取的 API 令牌或服务器可能提供给客户端的任何其他标识符也是如此。 仅供参考,MDN 文档的这一部分现已更正:github.com/mdn/sprints/issues/2914 本质上,这里的重点是使传输安全并不能“绝对”保护信息。例如,如果没有设置 HttpOnly 属性,客户端仍然可以访问硬盘驱动器和 javascript

以上是关于为啥“安全”cookie 不安全?的主要内容,如果未能解决你的问题,请参考以下文章

为啥大型网站不喜欢本地存储而不是 cookie? [复制]

为啥 Spring MockMvc 结果不包含 cookie?

为啥不使用长寿命会话 ID 来代替带有令牌的持久 cookie?

为啥不将 JWT 访问令牌存储在内存中并在 cookie 中刷新令牌?

从服务器接收的 Cookie 是安全的,但发送到服务器的 Cookie 不安全 ASP.NET

.简述Cookie的安全性及其作用,以及如何处理Cookie。