【问题标题】:IndexedDB and same origin policyIndexedDB 和同源策略
【发布时间】:2017-02-24 14:00:53
【问题描述】:

以下内容来自 Mozilla 的网站:

与大多数 Web 存储解决方案一样,IndexedDB 遵循同源策略。因此,虽然您可以访问域内存储的数据,但无法访问跨域的数据。

我理解从 Javascript 访问不同域时的同源策略。但我不明白这如何适用于 IndexedDB。我认为 IndexedDB 只是一个数据库,你可以在其中存储任何你想要的东西。 IndexedDB 如何知道有关域的任何信息,为什么它甚至会关心它是否知道?即使我设法从不同的域检索数据(这是可能的),我仍然可以将该数据存储在数据库中。那么域与此有什么关系呢?

我正在构建一个在 Electron 中运行并且可以访问来自多个域的数据的单页 Web 应用程序。我会将这些数据存储在 IndexedDB 数据库中。大概我只有一个数据库。只是不清楚在这种情况下,同源政策会有什么(如果有的话)。

如果我的 Web 应用程序没有导航到 url,而只使用 XMLHttpRequest 从后端服务检索数据,那么从技术上讲没有域。

【问题讨论】:

    标签: indexeddb


    【解决方案1】:

    本例中的 SOP 指的是访问 IndexedDB 的脚本的来源。来自 example.com/foo.js 的脚本可以访问 example.com 的 IndexedDB,但来自 evil.com/bar.js 的脚本无法访问它。更重要的是,您访问的每个域都有不同的 IndexedDB 实例、本地存储、会话存储等。

    此外,这并不是不能将数据从 evil.com 写入 example.com 的数据库。这是关于 evil.com 的脚本访问 example.com 的数据库。所以浏览器不会用它的来源标记数据,而是用脚本标记数据。这是有道理的,因为问题在于恶意脚本,而不是数据本身。

    【讨论】:

    • 但如果我的脚本作为 javascript 文件嵌入到网络应用程序中,则没有与该脚本关联的域。那么 IndexedDB 是如何处理的呢?
    • 我不知道电子使用什么作为嵌入应用程序的脚本的域。可能是本地主机或特定于它的东西。在任何情况下,如果您还从应用程序中的真实域加载脚本,并且如果 Electron 遵守 SOP,那么该脚本将无法访问应用程序的数据。
    • Electron 使用本地主机。 Electron 支持 SOP,但这可以禁用。由于我需要访问来自不同域的数据,我需要禁用它,所以在这种情况下,我相信 SOP 对 IndexedDB 数据库没有影响。
    猜你喜欢
    • 2014-02-03
    • 2012-08-22
    • 2010-09-25
    • 2014-06-05
    • 2021-04-02
    • 2014-02-01
    • 2014-07-23
    • 2011-06-08
    • 2013-06-19
    相关资源
    最近更新 更多