我有一个客户端的python网站,它运行类似Dropbox的功能,允许上传文件。
我想确保上传文件不会将服务器打开到漏洞。
因此,我将所有上传的文件作为blob存储在postgres数据库中,并且不信任文件的文件名和扩展名,我让应用程序自行确定。
I ran into problems在尝试让应用程序自行决定文件格式时,我的问题归结为:
libmagic
之类的内容,我可以如何以最佳方式确定文件格式?感谢。
答案 0 :(得分:0)
引用的“bug”问题(链接到this)并未引用错误,它表示某些MS Office文件类型与Java jar一样,打包并压缩为zip文件。如果将.xlsx文件重命名为.zip,则可以查看内容 - 我在一个简单的示例中找到了13个.xml文件和一个.bin打印机设置文件。
为了安全起见,您不能“信任”用户提供的mime类型和文件扩展名,但您原则上可以使用它们来验证内容对于声明的文件类型是否有效。第一级检查将确保声明的Office文件实际上是有效的zip文件,第二级检查内容是否符合Office应用程序的预期。不是Office开发人员我不知道检查zip存档的过程,确定它适用于哪个Office应用程序,并验证应用程序是否可以打开它,但我确定它存在于MSDN上的某个位置。
更重要的是,“安全对我的申请很重要”是什么意思?安全性可防止不需要的事件 - 您需要定义要阻止的内容。您是否希望用户只能上传白名单应用程序的文件?是否应该阻止他们上传列入黑名单的文件类型(如.exe)?如果用户上传了10MB的随机位并将其称为.xyz文件,那么你可以吗?