【问题标题】:How does jsFiddle allow and execute user-defined JavaScript without being dangerous?jsFiddle 如何在不危险的情况下允许和执行用户定义的 JavaScript?
【发布时间】:2011-12-21 16:26:53
【问题描述】:

我一直在开发一个 JS 库,并想在 Github 上设置一个演示页面,例如,允许用户定义自己的回调和执行命令。

我知道“eval() 是邪恶的”,并且我可以看到盲目的 eval() 脚本可能会导致 XSS 和其他安全问题。我正在尝试制定一些替代方案。

我真的很喜欢 jsFiddle 的交互性。我查看了他们的源代码,但希望有人可以在这里列出 jsFiddle 如何允许和执行用户定义的 JavaScript 而不会造成危险。只要不涉及第 3 方回显服务器,我希望我能效仿这种方法。

【问题讨论】:

    标签: javascript security cross-domain eval user-input


    【解决方案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它)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多