限制来自file://

时间:2015-10-07 16:20:48

标签: javascript html5 iframe webkit sandbox

我有一个离线网络应用程序(HTML5),它在基于webkit的浏览器中从本地文件系统(file://)运行。

此应用程序允许显示第三方HTML5小部件。它们也存储在本地(file://)并显示在Iframe中。

由于两个html文件都是从file://提供的,因此它们看起来来自同一个来源,因此共享LocalStorage和SessionStorage。这是一个问题,因为第三方小部件可以访问彼此的数据。

我想限制此功能,以便每个小部件都有(种类)他们自己隔离的localStorage。

我尝试在iframe上设置sandbox - 属性。这完全禁用了localStorage(抛出SecurityError)。

我尝试设置sandbox="allow-scripts allow-same-origin",但这会创建与以前相同的行为(所有小部件都可以访问所有数据),因为所有小部件的来源都相同(file://)

我接下来尝试的是修改Storage.prototype以使用调用iframe文档的url / path为所有localStorage-key添加前缀(以创建虚假的原始处理)。这在使用<iframe>.contentWindow.Storage.prototype的第一个iframe中工作正常,但如果小部件嵌套其自己的iframe则会中断。嵌套的iframe将使用未触及的原型获取自己的Storage-object,并访问原始的localStorage数据。

我考虑过创建某种递归的东西来检测所有嵌套的iframe并在iframe上运行我的“沙盒”任务,但我找不到一个好方法。扩展HTMLIframeElement.prototype不适用于由markup或document.createElement创建的iframe。我还在iframe文档上使用MutationObserver进行了一些实验,但这可能是性能杀手(浏览器在资源有限的嵌入式系统上运行)。

理想情况下,我希望这些小部件在支持localStorage的沙盒iframe中运行,但具有自己的原点(因此无法访问其他小部件的数据或父页面的数据)。

任何建议表示赞赏! :)

0 个答案:

没有答案