【问题标题】:Does HTML5 web storage (localStorage) offer a security advantage over cookies?HTML5 网络存储 (localStorage) 是否提供优于 cookie 的安全优势?
【发布时间】:2014-07-04 11:01:43
【问题描述】:

我正在寻找 cookie 的替代方案,并且我已经阅读了有关 HTML5 网络存储 here 的信息,并且我已经阅读了一个更简单的解释 here,但我仍然不明白它是如何完全工作的。有人可以提供一个稍微非技术性的解释,以便我可以理解技术位。它说浏览器必须存储键值对,但是它存储在哪里以及如何存储以及为什么其他站点无法访问它?为什么不将其视为另一种形式的 cookie?

  1. 我正在寻找一种彻底而完整的 cookie 替代方案;就像我的组织想要替换它的所有网站,不再使用 cookie 来替代说网络存储,那么我们可以轻松地对这个要求说“是”吗?假设只使用最新的浏览器。

  2. Web 存储在以下情况下如何以及以何种方式增强安全性? 与饼干相比?是否有可能危及安全 以其他方式?有没有现实生活经历过的人 可以分享一下优缺点吗?

【问题讨论】:

    标签: cookies local-storage session-storage


    【解决方案1】:

    localStorage 和 cookie 的区别

    Same Origin Policy 保护 cookie 和 localStorage 免受无关域的访问。

    不同之处在于 localStorage 只能通过 JavaScript 访问,而 cookie 可以通过 JavaScript1随每个 HTTP 请求发送。

    与 cookie 相比,使用 localStorage 并没有太多的安全优势。两者的区别在于目标不同:localStorage 可用于仅在 JavaScript 中使用的东西,而 cookie 可用于在服务器上存储您需要的东西(同样)。

    有权访问用户计算机浏览器的任何人都可以访问这两者,并且本地存储和 cookie 都可以通过在网页上执行的 JavaScript 访问。 (对于后者,请参阅下面的例外情况。)

    如果您在browser console 中输入localStoragedocument.cookie,则可以看到这一点。

    1. 您可以在 cookie 上设置 HTTPOnly 标志,使其无法通过 JavaScript 访问。

    如何使用本地存储

    由于已经有很多关于使用 localStorage 的信息,我将仅参考两个记录它的网站:

    数据的存储方式

    数据的存储方式因浏览器而异。下面,我将提供有关 Mozilla Firefox 如何存储 cookie 和本地存储的信息。

    注意:有关如何查找 Firefox 配置文件的说明,请参阅 Mozilla 支持的 this article

    Cookies

    Firefox 将您的 cookie 存储在您的配置文件文件夹中名为 cookies.sqlite 的文件中。这是一个SQLite 数据库。使用SQLiteStudio打开文件显示数据库包含一个表moz_cookies

    表结构

    表格结构如下:

    表格内容

    这是我cookies.sqlite数据库的一部分内容:

    本地存储

    Firefox 将您的 localStorage 数据存储在您的配置文件文件夹中名为 webappsstore.sqlite 的文件中。这是一个SQLite 数据库。使用SQLiteStudio打开文件显示数据库包含一个表webappsstore2

    表结构

    表格结构如下:

    栏目内容结构:

    • 范围:
      • ::
    • 键:
      • 存储值的名称。
      • 储值
    • 安全
      • 未使用此列。
    • 所有者
      • 未使用此列。

    表格内容

    这是我webappsstore.sqlite数据库的一部分内容:

    这与我在网页https://login.persona.org 的控制台中键入localStorage 时得到的数据相同。

    结论

    如您所见,来自 cookie 和本地存储的数据以相同的方式由浏览器存储。如果您担心存储在用户计算机上的数据的安全性,localStorage 提供优于 cookie 的安全优势。

    事实上,它甚至可能有更大的风险,因为您可以将 cookie 设置为在一定时间后过期,而 localStorage 不会过期。因此,保存在localStorage 中的数据在用户计算机上的保留时间可能比您使用 cookie 时的时间长。

    (但是,如果您只需要在单个会话期间存储数据,则可以使用sessionStorage 而不是localStorage。)

    【讨论】:

    • 谢谢,您对 localstorage 的工作原理有简明的解释吗?抱歉,由于我没有最低声誉,因此无法在此论坛中为您的答案投票;在迁移之前,我已将其发布在 infosecurity.stackexchange 上。
    • @dozer 我添加了很多关于浏览器如何存储cookies和本地存储的信息。我希望它是您正在寻找的。​​span>
    • 谢谢伙计 - 这回答了它,你已经付出了最大的努力!
    【解决方案2】:

    听起来您正在考虑制定公司范围内关于在 Web 应用程序开发中使用 cookie 的政策。

    因此,对于公司范围的政策,不仅要考虑服务器生成 HTML+JavaScript 的典型类型 webapp,还要考虑公司 Web 应用程序可能发布的任何潜在 Web API。此类 Web API 可能用于 AJAX 目的,但也可能供其他类型的客户端使用,例如 B2B 类型的数据馈送,这可能依赖于消费者端的某种形式的持久性。例如,像Twilio 这样的“浏览器”只能理解 TwiML,而不是 HTML+JS,并且本地存储在那里不适用。如果与 Twilio 接口的 webapp 依赖于持久存储,则本地存储不是一个选项(而 cookie 是)。

    这并不是说此类应用程序(如果存在或将存在于您的组织中)不能(重新)设计以避免需要客户端持久性。也就是说,本地存储不一定总是在所有情况下都可用以提供 cookie 的替代方案。

    否则,user2428118 的回答很好地对比了这两种技术。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2014-02-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多