【问题标题】:Risks in allowing users to upload HTML/JS files允许用户上传 HTML/JS 文件的风险
【发布时间】:2012-01-03 22:19:11
【问题描述】:

我们正在为 HTML5 游戏设计一个在线街机游戏。用户可以上传包含他们游戏的 zip 文件。

上传时,服务器会解压缩 zip 文件,并循环检查每个文件的扩展名是否允许:

  • .html
  • .js
  • .png
  • .jpg
  • .appcache
  • .m4a
  • .ogg

(必须在导出这些文件的游戏编辑器中制作游戏)。这应该可以防止人们上传 zip、服务器端脚本文件等。

然后将游戏移至我们的静态无 cookie 域 (scirra.net)。当在我们的 scirra.com 页面上玩游戏时,游戏会显示在指向 scirra.net 域的 iframe 中。这应该可以防止恶意 JS 访问 scirra.com cookie。

这种 iframe 技术和白名单是否足够全面,可以防止任何恶意行为?请注意,我们无法真正筛选每个 JS 文件,因此我们应该假设人们会尝试上传恶意 JS。

【问题讨论】:

  • 我知道这可能会导致一些问题,但你需要一个类似苹果的审批流程。
  • 我认为这还取决于您对哪种类型的安全感兴趣。您是否只对保护您的服务器感兴趣,或者您是否也有兴趣确保您没有向您的游戏玩家托管恶意代码.如果您同时考虑这两种情况,那么您可能需要做更多的工作来验证用户是否正在制作(即使在您的编辑器中)一些可能会利用游戏玩家的狡猾的 JavaScript。
  • @Daniel,这对我们来说并不现实。我们有大量想要使用它的人,并希望有一种方法可以对每个游戏进行沙盒处理,以确保其安全。我只是想知道在不同域的框架中运行的 JS 是否会造成任何损害。
  • @RLH 什么样的 JS 可以利用玩家?我们对两者都感兴趣。
  • @Tom: window.location = http://somevirusinfestedsite.com 对于初学者。 while (true) alert('haha');(和它的变种)把另一个放在那里。

标签: javascript security iframe whitelist


【解决方案1】:

在您提供的游戏编辑器中加入一些筛选功能怎么样?屏蔽对外部 URL 的引用、执行代码验证、检查编码等。

您必须锁定 zip 文件以防止被篡改,但无论如何这可能是个好主意。

【讨论】:

    【解决方案2】:

    origin inheritance rules for iframes 将防止 scirra.net iframe 干扰 scirra.com。

    但是,这并不能阻止 所有 攻击。实际上,您正在引入一个存储的 XSS 漏洞。 XSS 可用于引入基于浏览器的攻击,例如利用 ActiveX 组件中的缓冲区溢出。利用 Flash、Adobe reader 或 Microsoft Office 中的漏洞。

    您应该考虑对 scirra.net 内容运行防病毒软件。尽管这并不能阻止所有攻击。 iframe 页面可以重定向或引入另一个包含恶意内容的 iframe。

    正如 Cheeksoft 指出的那样。应用程序将能够通过 XSS 相互影响。恶意应用程序可以访问另一个应用程序offline storage 或获取嵌入在另一个应用程序中的其他数据。强制每个应用程序都有其子域将缓解此问题。您可以设置 DNS 记录以将 *.scirra.net 指向您的服务器,并在您的 Web 应用程序中处理域名。

    【讨论】:

    • 如果您将所有提交的应用程序托管在同一个域中,您可能已经停止针对您自己的域存储(和反射)xss,但是一个恶意应用程序可以对所有其他应用程序执行 xss 攻击。使用他们自己动态生成的域名为每个人提供服务,并尝试说服开发人员始终将他们的 cookie 设置为 myapp.scirra.net,而不要只设置 scirra.net。
    • @Cheekysoft 是的,这很好。我没有考虑那个向量,可能有有价值的信息存储在其他应用程序或离线 js 存储系统中。
    【解决方案3】:

    对于阅读本文的其他人,有一个 experimental/beta iFrame 沙盒属性:

    http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox

    请注意,它目前仅适用于 Chrome 和 Opera。这允许您指定一些限制功能。

    但是,对于我们的问题,我们放弃了这个想法,并决定因为我们处于拥有游戏创建程序的有利位置,我们可以简单地让用户上传保证安全的 Json 数据核心引擎功能由我们托管。

    我们可以手动审核和批准使用的任何插件,这比手动批准每个游戏要小得多。

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2016-03-30
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多