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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 void 的情况下重新启动 CSS 动画?

如何允许用户在不登录的情况下使用 Google Form 上传文件?

如何在不使用数据库的情况下进行登录

如何在不使用 Flexbox 的情况下水平对齐元素?

如何在不允许请求页面两次的情况下支持 IDM

PostgreSQL:如何在不延迟插入响应的情况下执行插入触发器?