Amazon S3上用户上传的文件引起的Web应用程序安全问题?

时间:2017-11-19 20:22:26

标签: ruby-on-rails security amazon-s3 paperclip

背景

我有一个网络应用程序,用户可以上传各种文件(例如jpg,png,r,csv,epub,pdf,docx,nb,tex等)。目前,我们确切地将用户可以上传的文件类型列入白名单。这种限制有时会让用户烦恼(即因为他们必须压缩不允许的文件,然后上传zip)和我们(因为用户写支持要求将其他文件类型列入白名单)。

理想解决方案

理想情况下,我希望更积极地将文件列入白名单。具体来说,我想(1)找出可信任的文件类型,以及(2)将它们全部列入白名单。拥有更大的白名单会更方便用户,并减少支持票的数量(如果只是非常轻微)。

我所知道的

我做了几个小时的研究并发现了常见问题(例如路径遍历,将资源放在根目录中,htaccess漏洞,无法验证mime类型等)。虽然这项研究很有意思,但我的理解是,如果您的资产存储在Amazon S3(或类似的云存储服务)上,许多这些问题都没有实际意义(或大大减轻了) - 这是大多数现代Web应用程序管理用户上传的方式文件。

这个问题已经被问过几十万次了吗?!

请不要将此误认为是“用户上传内容的安全风险是什么?”题。有already many questions like that,我不想在此重复讨论。

更具体地说,我的问题是,“如果有传统/现代网络应用程序设置,存在哪些风险?”换句话说,我不关心一些旧的PHP应用程序或与IE6相关的漏洞。假设文件存储在像AmazonS3这样的云服务中,我应该担心什么?

有关基础架构/架构的上下文

所以......要回答这个问题,你可能需要更多关于我的设置的背景信息。也就是说,我怀疑这是一个相对常见的设置,因此希望答案对于任何编写现代Web应用程序的人都有广泛的用处。

我的堆栈
  • Ruby on Rails应用程序,托管于Heroku
  • 用户可以上传各种文件(通过Paperclip)
  • 服务器验证mime类型和扩展名(针对白名单)
  • 文件存储在Amazon S3上(具有不同的ACL权限)
当用户上传文件时......
  • 我直接在tmp文件夹中的AS3上传文件(尚未触及我的服务器)
  • 我的服务器然后从AS3上的tmp文件夹下载文件。
  • Paperclip运行验证并执行任何处理(例如剪切图像缩略图)
  • 最后,Paperclip将文件放回AS3的新永久位置。
当用户下载文件时......
  • 用户点击下载向我的API发送请求的文件(例如/api/atricle/123/download
  • 在内部,我的API从AS3读取文件,然后将其提供给用户(作为内容类型附件)
  • 因此文件会短暂地通过我的服务器(即不仅仅是重定向)
  • 从用户的角度来看,该文件是从我的API提供的(即用户不知道该文件存在于AS3上)

问题

  • 鉴于此设置,将各种文件类型列入白名单是否安全?
  • 是否有一些类型的文件总是最好避免(例如JS文件)?
  • 我的设置中是否有明显的缺陷?我怀疑不是,但如果是的话,请提醒我!

0 个答案:

没有答案
相关问题