以下内容取自Mozilla的网站:
与大多数Web存储解决方案一样,IndexedDB遵循同源策略。因此,虽然您可以访问域中的存储数据,但您无法跨不同域访问数据。
在从Javascript访问不同的域时,我理解同源策略。但我不明白这是如何适用于IndexedDB的。我认为IndexedDB只是一个数据库,你可以存储你想要的任何东西。 IndexedDB如何了解域名,为什么它甚至会关心域名?即使我设法从不同的域(可能)检索数据,我仍然可以将数据存储在数据库中。那么域名与此有何关系?
我正构建一个在Electron中运行的单页Web应用程序,可以访问多个域中的数据。我将这些数据存储在IndexedDB数据库中。据推测,我只有一个数据库。在这种背景下,同样来源的政策将会有什么(如果有的话)清楚。
如果我的网络应用程序没有导航到网址但只使用XMLHttpRequest从后端服务检索数据,那么从技术上讲,没有域名。
答案 0 :(得分:4)
这种情况下的SOP是指正在访问IndexedDB的脚本的来源。 example.com/foo.js中的脚本可以访问example.com的IndexedDB,但来自evil.com/bar.js的脚本无法访问它。更重要的是,您访问的每个域都有不同的IndexedDB实例,本地存储,会话存储等。
此外,它不是无法将来自evil.com的数据写入example.com的数据库。它是关于来自evil.com的一个脚本从example.com访问数据库。因此,浏览器不会使用它的来源标记数据,而是标记脚本。这是有道理的,因为它是问题的恶意脚本,而不是数据本身。