在 iFrame 中安全地执行 HTML5/Javascript

Posted

技术标签:

【中文标题】在 iFrame 中安全地执行 HTML5/Javascript【英文标题】:Executing HTML5/Javascript Within An iFrame Securely 【发布时间】:2012-02-08 17:04:19 【问题描述】:

我正在寻找一个网站来托管 html5 游戏。由于这些游戏有机会包含恶意 javascript,我想知道如何设置安全环境来托管它们。

似乎用 iframe 嵌入游戏是答案,但我对网站开发比较陌生,所以有一些问题:

有没有一种简单的方法可以在同一个域上安全地托管游戏,或者...

游戏是否必须托管在不同的域中,然后嵌入到 iframe 中,才能与父文档交互?

如果游戏在托管在另一个域上时执行,它是否可以以任何恶意方式与该主机域交互?

【问题讨论】:

iframe + 安全 = 问题总是...在这里阅读一些想法 msdn.microsoft.com/en-us/library/bb735305.aspx ***.com/questions/229624/… iframehtml.com/iframe-security.html @DmitryBoyko 感谢您的链接。很有用。不过,除了为此使用 iframe 之外,我还有什么其他选择? :) 【参考方案1】:

跨站点脚本和 cookie 的超限将是一个很大的问题。利用浏览器的同源策略将是您防御这一点的一种有价值的方法。 ref1ref2

确保您的网站从不同的域提供给贡献者应用程序。 (例如 coolgames.commycoolgames.com) - 这会将您的代码的原始范围与他们的分开。 确保每个不同的贡献者都从一个唯一的子域(例如bob.mycoolgames.comdave.mycoolgames.com)提供他们的应用程序/游戏 - 这将有助于隔离不同开发者的来源。每个人都需要小心,切勿将 cookie 限定为 .mycoolgames.com,否则它们会过度暴露自己。

您可能还希望通过在现代浏览器中利用新的Content Security Policy 支持来进一步保护您自己的应用程序。这还将有助于mitigate 对抗clickjacking attacks。

关于 iframe:

您能解释一下为什么您认为您需要使用 iframe 吗?好的老式链接有什么问题?

如果图形设计要求必须使用 iframe,您可以轻松地将所有嵌入式游戏 iframe 放入 www.mycoolgames.com 的动态页面中,您不会保留任何敏感系统、数据或代码 - 保留所有用户身份验证系统、CMS 系统和仅在 *.coolgames.com 上的应用程序的数据

【讨论】:

谢谢!子域的信息尤其有帮助。 谢谢。我能问一下你最后一句“我个人会……”是什么意思吗?您的意思是将页面重定向到托管游戏的网站吗? @Matthew Scratch 那,我在打字之前就想好了。点击劫持的主要风险是当有人将您的网站 iframe 放入他们的网站时。将其他人的内容放入您自己网站内的 iframe 中,不会让您面临太多额外风险。但我想完全避免使用任何跨域 iframe 是很容易的。 那么问题是我不能在页面上放置像广告这样的元素,甚至不能在界面上放置很多元素。 我有机会收到你的电子邮件吗?我真的很想更深入地讨论这个问题,并得到澄清。如果您不介意,我将不胜感激。【参考方案2】:

首先 - 这是一个很好的问题!在设计基于 iframe 的托管解决方案时,我也问过自己同样的问题。

第二个 - 经过短暂的搜索后,我发现了iframe sandbox 属性

TLDR - 它使开发人员能够声明哪些安全选项将应用于 iframe,让浏览器定义定制的限制范围

所以.. 我找到了一篇很棒的文章,它给出了这个功能使用的真实示例 + 一些清晰的解释(阅读更多关于这个主题的信息 here)。简而言之:

<iframe sandbox="security options goes here" src="your hosted page"></iframe>

安全选项有:

allow-forms 允许提交表单。 allow-popups 允许弹出窗口 (window.open()、showModalDialog()、target="_blank" 等)。 allow-pointer-lock 允许(惊喜!)指针锁定。 允许同源 允许文件保持其来源;从加载的页面 https://example.com/ 将保留对该来源数据的访问权限。 allow-scripts 允许 JavaScript 执行,也允许功能 自动触发(因为它们很容易通过 JavaScript)。 allow-top-navigation 允许文档跳出 通过导航***窗口来获取框架。

例如:

<iframe sandbox="allow-scripts allow-popups" src="https://mywebsite.com/hosted_page"></iframe>

还值得一提的是,此安全功能得到高度支持(can I use 救援)

阅读愉快/编码...愿安全部队与你同在 :)

【讨论】:

以上是关于在 iFrame 中安全地执行 HTML5/Javascript的主要内容,如果未能解决你的问题,请参考以下文章

查看/下载PHP上传 - 如何安全地进行病毒?

iframe跨域通信方案

在 iframe 中跨域加载 Angular UI

使用 postMessage + iframe 实现跨域通信

有没有一种在 Angular 7 中嵌入 iframe 的安全方法?

在 iframe 中使用 Selenium:NoSuchElementException