【问题标题】:Is it possible to sanitize Javascript code?是否可以清理 Javascript 代码?
【发布时间】:2011-04-04 00:28:36
【问题描述】:

我希望允许用户在我的网站区域中贡献 Javascript。

  1. 这完全是疯了吗?
  2. 是否有任何 Javascript 清理脚本或良好的正则表达式模式来扫描警报、iframe、远程脚本包括和其他恶意 Javascript?
  3. 是否应该手动授权此过程(通过人工检查 Javascript)?
  4. 允许用户仅使用框架(如 jQuery)而不是让他们访问实际的 Javascript 是否更明智?这样可能更容易监控。

谢谢

【问题讨论】:

  • 你想让你的用户做什么?
  • 创建自己的小部件,根据自己的喜好重新排列或隐藏页面元素等
  • 如果这是用户将要使用 javascript 做的事情,您不妨在自己的代码中为他们提供功能,用户偏好,他们在他们的帐户中切换。您可以为他们提供一个地方来添加您验证的小部件,然后将声音小部件提供给社区的其他人。

标签: javascript xss


【解决方案1】:

我认为正确答案是 1。

一旦您允许使用 Javascript,您就会向自己和您的用户敞开心扉面对各种问题。没有完美的清理 Javascript 的方法,像 Troll Army 这样的人会把它作为他们的个人任务来搞砸你。

【讨论】:

    【解决方案2】:

    1。这完全是疯了吗?

    不这么认为,但接近。让我们看看。

    2。是否有任何 Javascript 清理脚本或良好的正则表达式模式来扫描警报、iframe、远程脚本包含和其他恶意 Javascript?

    是的,至少有 Google CajaADSafe 来清理代码,允许它被沙盒化。不过,我不知道他们提供的最值得信赖的程度。

    3。这个过程是否应该手动授权(通过人工检查 Javascript)?

    沙盒可能会失败,因此这将是一个明智的解决方案,具体取决于被恶意(或错误)代码攻击的风险和权衡。

    4。允许用户只使用框架(如 jQuery)而不是让他们访问实际的 Javascript 会更明智吗?这样可能更容易监控。

    JQuery 只是普通的 Javascript,所以如果你想保护自己免受攻击,它根本无济于事。

    如果防止此类攻击至关重要,您可以实现自定义语言,在后端对其进行解析并生成受控、安全的 javascript;或者您可以考虑另一种策略,例如提供 API 并从您应用的第三方组件访问它。

    【讨论】:

      【解决方案3】:

      看看Google Caja

      Caja 允许网站安全地嵌入来自第三方的 DHTML Web 应用程序,并实现嵌入页面和嵌入应用程序之间的丰富交互。它使用对象能力安全模型来允许广泛的灵活安全策略,以便包含页面可以有效地控制嵌入式应用程序对用户数据的使用,并允许小工具防止小工具的 UI 元素之间的干扰。

      【讨论】:

        【解决方案4】:

        我不会检查诸如脚本包含之类的邪恶内容,而是将您希望使用的少数命令列入基于正则表达式的白名单。然后让人工授权并向白名单添加新的可接受命令。

        【讨论】:

          【解决方案5】:

          想想可以用javascript做的所有事情。然后想想如果你能在别人的网站上做的话你会做的事情。这些是人们会做的事情,只是因为他们可以,或者想知道他们是否可以。我认为这根本不是一个好主意。

          【讨论】:

            【解决方案6】:

            设计/实现您自己的受限脚本语言可能更安全,这种语言可能与 JavaScript 非常相似,但由您自己的解释器控制。

            【讨论】:

            • 你知道任何可能已经在这样做的开源项目吗?
            【解决方案7】:
            1. 可能。做坏事的范围将比您简单地允许 HTML 但尽量避免分配 JavaScript 时要大得多。
            2. 我不知道。
            3. 嗯,有两件事:您真的想花时间做这件事吗?如果您这样做,最好确保他们看到的是 JavaScript 代码,而不是真正的实时 JavaScript!
            4. 我不明白这有什么不同,除非你确实有人批准了帖子,而且那个人碰巧更喜欢使用 jQuery 而不是普通的 JavaScript。

            【讨论】:

              【解决方案8】:

              将其托管在不同的域上。浏览器中的同源安全策略将阻止用户提交的 JS 攻击您的网站。

              将其托管在不同的子域上是不够的,因为子域可以在更高级别的域上设置 cookie,这可以用于会话固定攻击。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-08-26
                • 1970-01-01
                • 1970-01-01
                • 2012-09-28
                • 2019-02-13
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多