IndexedDB 和同源策略

IndexedDB and same origin policy

以下内容摘自Mozilla网站:

Like most web storage solutions, IndexedDB follows a same-origin policy. So while you can access stored data within a domain, you cannot access data across different domains.

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

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

如果我的网络应用程序没有导航到 url,而是仅使用 XMLHttpRequest 从后端服务检索数据,那么从技术上讲不存在域。

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

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