jsFiddle 如何在不危险的情况下允许和执行用户定义的 JavaScript?
Posted
技术标签:
【中文标题】jsFiddle 如何在不危险的情况下允许和执行用户定义的 JavaScript?【英文标题】:How does jsFiddle allow and execute user-defined JavaScript without being dangerous? 【发布时间】:2011-12-21 16:26:53 【问题描述】:我一直在开发一个 JS 库,并想在 Github 上设置一个演示页面,例如,允许用户定义自己的回调和执行命令。
我知道“eval()
是邪恶的”,并且我可以看到盲目的 eval()
脚本可能会导致 XSS 和其他安全问题。我正在尝试制定一些替代方案。
我真的很喜欢 jsFiddle 的交互性。我查看了他们的源代码,但希望有人可以在这里列出 jsFiddle 如何允许和执行用户定义的 javascript 而不会造成危险。只要不涉及第 3 方回显服务器,我希望我能效仿这种方法。
【问题讨论】:
【参考方案1】:jsFiddle 在单独的域http://fiddle.jshell.net
(try it and see) 上执行用户脚本。
因此,它不能与父框架交互,也不能窃取cookie。
您实际上可以在没有单独服务器的情况下执行此操作,方法是将静态页面放置在从 Javascript 中的查询字符串读取的单独域中。 您可以使用页面标题进行交流(敌人也可以)。
【讨论】:
在单独的域上执行是什么意思——加载一个包含执行 JavaScript 的页面的 iFrame? @editor:没错。<iframe>
中的页面必须位于一个单独的域中,该域没有任何东西可以被攻击(没有 cookie)
@SLaks - 为什么alert(document.cookie);
在 jsFiddle 中有效?
有点晚了。 @ShlomiHassid 安全问题围绕着访问 cookie,而不是访问您的浏览器环境。因此,alert('hello')
工作并在警告框中输出“hello”,但alert(document.cookie)
仅输出一个空字符串(警告框仍然显示,但不显示任何 cookie,除非 jshell.net 域启用了 cookie它)以上是关于jsFiddle 如何在不危险的情况下允许和执行用户定义的 JavaScript?的主要内容,如果未能解决你的问题,请参考以下文章