【问题标题】:Security around user uploaded files用户上传文件的安全性
【发布时间】:2012-01-14 00:22:53
【问题描述】:

我有一个客户的 python 网站,它运行一个类似于 Dropbox 的功能,允许上传文件。

我想确保上传文件不会打开服务器漏洞。

因此,我将所有上传的文件作为 blob 存储在 postgres 数据库中,并且不信任文件的文件名和扩展名,我让应用程序自行确定。

I ran into problems 试图让应用程序自己决定文件格式时,所以我的问题归结为:

  1. 出于安全考虑,是否有必要限制允许上传的文件格式?
  2. 如果是,如果不使用libmagic 之类的东西,我如何才能以最佳方式确定文件格式?
  3. 在允许公开加载的文件时,我还需要采取其他措施以确保安全吗?

谢谢。

【问题讨论】:

  • 你到底在问什么?如何在没有 libmagic 的情况下检测docx
  • 安全性确保应该发生的事情发生。它不存在于真空中,它支持应用程序功能。如果您的汽车的安全目标是“不要在车祸中杀人”,您可以通过将速度限制为 10 英里/小时来解决它。但如果它的功能要求包括高速行驶,那么安全必须以其他方式实现。您的功能要求是否包括上传任何类型的文件?如果是这样,所需的安全机制比只需要上传图像类型更困难。安全无法告诉您您的要求是什么。
  • 要求:上传常用文件类型的文件,预览、分享、下载。拥有不会将文档泄露给非授权用户的服务器。
  • 然后您可以将“common”定义为“我的预览器可以理解的文件类型”。如果您可以使用预览器成功打开并显示文件,则允许上传。如果所有用户都被授权访问相同的文件类型,那么您无需担心用户在文件类型上撒谎以绕过授权。但是,如果某些用户不允许下载 .mp3 文件,则必须确保检测到 .mp3 内容,无论扩展名如何,无论它是否包含在 .tgz 的 zip 文件中。

标签: python file web-applications upload


【解决方案1】:

引用的“错误”问题(链接到 this)并不是指错误,它表示某些 MS Office 文件类型(如 Java jar)已打包并压缩为 zip 文件。如果将 .xlsx 文件重命名为 .zip,则可以查看内容 - 我在一个简单示例中找到了 13 个 .xml 文件和一个 .bin 打印机设置文件。

出于安全考虑,您不能“信任”用户提供的 mime 类型和文件扩展名,但原则上您可以使用它们来验证内容对于声明的文件类型是否有效。第一级检查将确保声明的 Office 文件实际上是有效的 zip 文件,第二级将检查内容是否符合 Office 应用程序的预期。我不是 Office 开发人员,我不知道检查 zip 存档、确定它用于哪个 Office 应用程序以及验证应用程序是否可以打开它的过程,但我确信它存在于 MSDN 上的某个地方。

从根本上说,“安全性对我的应用程序很重要”是什么意思?安全性可防止不需要的事件 - 您需要定义要防止的内容。您是否希望用户只能为列入白名单的应用程序上传文件?是否应该阻止他们上传列入黑名单的文件类型(如 .exe)?如果用户上传 10MB 的随机位并将其称为 .xyz 文件,您可以接受吗?

【讨论】:

  • 谢谢,我重写了我的问题。更有意义?
  • 至于“bug”,确实是bug:是服务器端的file判断上传的文件是zip。它可能使用 zip 格式,但它实际上是一个 docx 文件,因此 debian 将其列为“突出错误”。只有在上传过程中文件确实被识别为“application/vnd.ms-word.document”或其他东西时,修补 mime 类型才会有所帮助。
  • 为了安全起见,将声称的扩展名与实际的扩展名进行比较是一个想法,但似乎包含许多不同文件格式的大量开销。最好只依赖一两个库,而不是很多很多例程。
  • http:"GET" 请求真的是 GET,还是真的是 TLS 流,还是真的是 IP 数据包,还是真的是 LAN 上的以太网帧?答案是,以上都是如此,甚至更多。深度数据包检测可以非常详细地了解应用程序特定的内容,但是说 TCP 数据包是 TCP 数据包并不是一个错误,无论它是否包含 SMTP 或 HTTP 或 FTP 数据。同样,无论其内容如何,​​说 zip 文件是 zip 文件也不是错误。在magic扩展为支持多层内容解码之前,它会按预期工作。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多