我计划为我的webapp构建一个模块系统,它使用沙盒iframe和postMessage应用程序接口来安全地运行自定义用户模块。iframe阻止所有DOM访问,并且应该只通过我提供的接口进行通信,该接口检查一些权限并提供数据。
该系统本身非常简单,在模块内部可以很好地使用普通的js代码,但是我希望允许开发人员使用通用的框架/库来简化开发,即使用Vue进行数据绑定。
向模块提供此类功能的最佳方式是什么?性能是一个巨大的因素,因为几十个这样的模块可能会同时运行。让沙箱模块共享库安全吗?
发布于 2018-08-29 00:57:54
好建议:不幸的是,iframe沙箱是双向的。一般来说(除了几个例外:主要是postMessage和pages that satisfy the same-origin policy),iframe实际上是一个单独的网页,不能从主页访问,反之亦然。这可能是一个更好的选择,而不是只要求个人开发人员使用轻量级库。
不好的建议:如果你自己托管其他开发者的文件,他们可以互相访问,但是以这种方式在iframe之间访问东西肯定不是理想的-而且这样做真的是一个糟糕的主意,因为它会让你暴露在各种与脚本相关的攻击中;更不用说如果你在单独的iframe之间共享Javascript变量,它们可能会意外地以意想不到的方式相互干扰。不要这样做,,除非你明确地相信这里的每一个开发人员都能正确地行为和良好地编写代码(例如,你在同一个工作场所)。实际上,根本不要这样做。
但是,如果您真的想这样做:目标托管在同一网站上的iframe可以通过全局变量parent访问其父页面(即iframe中的parent与宿主中的window相同,parent.$将是父对象的jQuery对象,parent.document.getElementById与document.getElementById相同)。父页面可以使用document.getElementById("the id of the iframe").contentWindow (和.contentWindow.document等在这里也可以)访问它的同源iframe,但是同样,如果您在页面上托管了潜在恶意开发人员的代码以绕过同源策略,您将允许这些开发人员访问您的页面以及您的用户在其上键入的任何信息,包括密码。
https://stackoverflow.com/questions/51920373
复制相似问题