【发布时间】:2012-01-14 00:22:53
【问题描述】:
我有一个客户的 python 网站,它运行一个类似于 Dropbox 的功能,允许上传文件。
我想确保上传文件不会打开服务器漏洞。
因此,我将所有上传的文件作为 blob 存储在 postgres 数据库中,并且不信任文件的文件名和扩展名,我让应用程序自行确定。
I ran into problems 试图让应用程序自己决定文件格式时,所以我的问题归结为:
- 出于安全考虑,是否有必要限制允许上传的文件格式?
- 如果是,如果不使用
libmagic之类的东西,我如何才能以最佳方式确定文件格式? - 在允许公开加载的文件时,我还需要采取其他措施以确保安全吗?
谢谢。
【问题讨论】:
-
你到底在问什么?如何在没有 libmagic 的情况下检测
docx? -
安全性确保应该发生的事情发生。它不存在于真空中,它支持应用程序功能。如果您的汽车的安全目标是“不要在车祸中杀人”,您可以通过将速度限制为 10 英里/小时来解决它。但如果它的功能要求包括高速行驶,那么安全必须以其他方式实现。您的功能要求是否包括上传任何类型的文件?如果是这样,所需的安全机制比只需要上传图像类型更困难。安全无法告诉您您的要求是什么。
-
要求:上传常用文件类型的文件,预览、分享、下载。拥有不会将文档泄露给非授权用户的服务器。
-
然后您可以将“common”定义为“我的预览器可以理解的文件类型”。如果您可以使用预览器成功打开并显示文件,则允许上传。如果所有用户都被授权访问相同的文件类型,那么您无需担心用户在文件类型上撒谎以绕过授权。但是,如果某些用户不允许下载 .mp3 文件,则必须确保检测到 .mp3 内容,无论扩展名如何,无论它是否包含在 .tgz 的 zip 文件中。
标签: python file web-applications upload