如何对我自己域中的 iframe 实施同源策略 iframe 限制?
我是 http://labcss.net 的创建者,我有一个安全问题需要解决。 labcss 与 jsFiddle 类似,只是 jsFiddle 在 sanbox 中执行其 Javascript 代码。由于我需要大量操作 iframe 的内容并与其交互,因此我无法使用“运行”按钮方法来将数据发送到 iframe 监狱。
我需要强制执行 Javascript 限制,以便在 iframe 中运行的内部 Javascript(尽管在同一域中)将在我的域之外执行,这样我就不会遇到 XSS 问题。 (不过我确实需要 Javascript 来执行)。
谢谢你的建议。
I am the creator of http://labcss.net, and I have a security issue I need to solve. labcss is similar to jsFiddle, only jsFiddle execute their Javascript code in a sanbox. Since I need to heavily manipulate the contents of the iframe and interact with it, I can't have the "Run" button approach, which sends the data to the iframe jail.
I need to enforce Javascript restrictions so that the internal Javascript which will run in the iframe, although in the same domain, will execute out of my domain, so I won't have XSS issues. (I do need the Javascript to execute though).
Thanks for the advice.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 Google Caja、Microsoft WebSandbox、Facebook FBJS、AdSafe 或(在非常现代的浏览器上)SES。这些都提供了安全的 Javascript 沙箱。但是,请注意:它们有相当数量的活动部件。
Caja 和 WebSandbox 允许您编写标准 Javascript,没有任何限制,并且您可以使用许多现有的 Javascript 库。 FBJS 和 AdSafe 让您使用不同的更受限制的语言编写:FBJS 使用 Facebook 的 Javascript 变体,AdSafe 使用 Javascript 的受限子集并拥有自己的库。
You could use Google Caja, Microsoft WebSandbox, Facebook FBJS, AdSafe, or (on very modern browsers) SES. These all provide a secure Javascript sandbox. However, be warned: they have a fair number of moving parts.
Caja and WebSandbox let you write standard Javascript, with no restrictions, and you can use many existing Javascript libraries. FBJS and AdSafe have you write in a different more restricted language: FBJS in Facebook's variant of Javascript, AdSafe in a restricted subset of Javascript with its own library.
您可能还会发现 HTML5 iframe 沙箱属性很有帮助。这是规范,但最好的描述可能是此处。
这似乎在 Chrome 上受支持,< a href="http://msdn.microsoft.com/en-us/hh563496.aspx" rel="nofollow">IE10, FireFox、Safari。
该规范表示,如果未设置“allow-same-origin”属性,“内容将被视为来自唯一的来源”。这应该会阻止您的子 iframe 访问父级 DOM 的任何部分。
You may also find the HTML5 iframe sandbox attribute helpful. This is the spec, but the best description might be here.
This seems to be supported on Chrome, IE10, FireFox, Safari.
The spec says that if the "allow-same-origin" attribute is not set, "the content is treated as being from a unique origin." This should prevent your child iframe from accessing any part of the parent's DOM.