Ste*_*erg 10 javascript iframe postmessage sandbox
我计划为我的webapp构建一个模块系统,该系统使用沙盒iframe和postMessage API来安全地运行自定义用户模块.iframe阻止所有DOM访问,并且只应通过我提供的接口进行通信,该接口检查某些权限并提供数据.
系统本身非常简单,并且可以在模块内部使用vanilla js代码,但我希望允许开发人员使用通用框架/库来简化开发,即使用Vue进行数据绑定.
为模块提供此类功能的最佳方法是什么?性能是一个很大的因素,因为几十个这样的模块可能同时运行.让沙盒模块共享库是否安全?
好建议:不幸的是,iframe沙盒是双向的.通常(除了少数例外:主要postMessage和满足同源策略的页面),a iframe实际上是一个单独的网页,无法从主机页面访问,反之亦然.它可能是一个更好的替代方案,只是请求各个开发人员使用轻量级库.
糟糕的建议:如果你自己托管其他开发者的文件,他们可以互相访问,但是iframe以这种方式在s 之间访问的东西当然不是理想的 - 这样做是一个非常糟糕的主意,因为它让你暴露给所有人各种与脚本相关的攻击; 更不用说iframe如果你在它们之间共享Javascript变量,那些单独的s可能会以意想不到的方式意外地相互干扰.不要这样做,除非你明确地相信这里的每个开发人员都能正常行事并且编码良好(即你在同一个工作场所).实际上,根本不要这样做.
如果你真的想这样做,但是:一iframe,其目标托管在同一网站上可以通过全局变量访问它的父页面parent(即parent在iframe相同window的主机,parent.$将父母的jQuery对象,并且parent.document.getElementById是相同document.getElementById).父页面可以访问其同源iframe的document.getElementById("the id of the iframe").contentWindow(.contentWindow.document也可以在此处使用),但是,如果您在页面上托管了潜在恶意开发人员的代码以绕过同源策略,那么让这些开发人员访问您的页面以及用户在其上键入的任何信息,包括密码.
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |