我正在寻找开发一个网站来举办HTML5游戏。由于这些游戏有机会包含恶意javascript,我想知道如何设置一个安全的环境来托管它们。
似乎用iframe嵌入游戏就是答案,但我对网站开发相对较新,所以有些问题:
有一种简单的方法可以安全地在同一个域上托管游戏,或者......
游戏是否必须托管在不同的域上,然后嵌入到iframe中,以便它无法与父文档交互?
如果游戏是在另一个域上托管时执行的,它是否可以以任何恶意方式与该主机域进行交互?
答案 0 :(得分:2)
跨域脚本和过度使用Cookie将是一个非常重要的问题。利用浏览器的同源策略将是一种有价值的方法来保护这一点。 ref1 ref2
coolgames.com
vs mycoolgames.com
) - 这会将您的代码的原始范围与他们的原始范围隔离开来。bob.mycoolgames.com
,dave.mycoolgames.com
) - 这将有助于隔离不同开发者的来源。每个人都需要小心,不要将cookie范围扩展到.mycoolgames.com
,否则他们会过度曝光。您可能还希望通过在现代浏览器中使用新的Content Security Policy支持来进一步保护您自己的应用。这将有助于mitigate对clickjacking attacks。
关于iframe:
你能解释为什么你认为你需要使用iframe吗?良好的老式链接有什么问题?
如果图形设计规定必须使用iframe,您可以轻松地将所有嵌入式游戏设置为www.mycoolgames.com上的动态页面,在此页面中您不会保留任何敏感系统,数据或代码 - 保留所有用户身份验证系统,CMS系统和仅在* .coolgames.com上的应用程序上的数据
答案 1 :(得分:1)
第一-这是一个很好的问题!设计基于iframe的托管解决方案时,我在问自己同样的问题。
第二-简短搜索后,我遇到了iframe sandbox
属性
TLDR -开发人员可以通过它声明将哪些安全选项应用于iframe,让浏览器定义量身定制的限制范围
所以..我找到了一篇很棒的文章,提供了有关此功能用法的真实示例,并提供了一些清晰的解释(有关此主题here的更多信息)。简而言之:
<iframe sandbox="security options goes here" src="your hosted page"></iframe>
安全选项为:
- 允许表单允许提交表单。
- 允许弹出窗口允许弹出窗口 (window.open(),showModalDialog(),target =“ _ blank”等)。
- 允许指针锁定允许(惊奇!)指针锁定。
- 允许相同来源 允许文件保持原点;从加载的页面 https://example.com/将保留对该原始数据的访问权限。
- 允许脚本允许执行JavaScript,还允许使用以下功能: 自动触发(因为它们通过 JavaScript)。
- 允许顶部导航允许文档脱离 通过浏览顶级窗口来显示框架。
例如:
<iframe sandbox="allow-scripts allow-popups" src="https://mywebsite.com/hosted_page"></iframe>
值得一提的是,该安全功能得到了高度支持(can I use用于救援)
快乐的阅读/编码...也许安全部队与您同在:)