【问题标题】:Is it okay to store session id in localStorage?可以将会话 ID 存储在 localStorage 中吗?
【发布时间】:2021-12-07 00:50:18
【问题描述】:

将用户的会话 ID 存储在 localStorage 中是否安全?在w3.org site,他们说

无论何时,用户代理都必须引发 SECURITY_ERR 异常 最初由 localStorage 返回的 Storage 对象的成员 属性由有效脚本来源不是的脚本访问 与在其上的 Window 对象的 Document 的来源相同 访问了 localStorage 属性。

那么这是否意味着 localStorage 可以用于敏感数据?

【问题讨论】:

  • 我认为这取决于您所说的敏感。它将以纯文本形式存储,并可通过浏览器调试功能进行访问。
  • 这与使用 cookie 没有什么不同
  • 您确定要将其存储在localStorage 而不是sessionStorage 中吗?

标签: html security local-storage


【解决方案1】:

httpOnly cookie 提供了localStorage 不提供的 XSS 防御层:

  • httpOnly cookie 无法从 [潜在恶意] JS 访问。
  • localStorage 可以从 JS 访问。

会话 ID 应存储在 httpOnly secure cookie 中。

【讨论】:

  • Cookie 容易受到 CSRF 攻击,因此应该使用 CSRF 预防方法进行保护(例如,向客户端发送额外的非httpOnly CSRF cookie 并在 HTTP 标头中返回其值到后端,首先验证)
【解决方案2】:

这取决于您所说的“它是否安全”?

localStorage 与不受路径限制的 cookie 一样安全。从网页,它只能被来自同一域的页面访问。数以万计的网站将会话 ID 存储在 cookie 中,这些 cookie 的安全限制与 localStorage 大致相同。

在网页之外,localStorage 和 cookie 都完全不受其他程序甚至在同一台计算机上运行的网络调试工具的访问。

【讨论】: