Django识别文件模式

问题描述:

我正在实现一种方法来限制运行Python 3.4的Django 1.8上的文件上载。Django识别文件模式

基本上,我想在使用mimetypes上传文件时检查它们的MIME类型。但是,当我操纵bad_image.exebad_image.exe.jpg的文件名时,MIME类型仍然是image/jpeg。这仍然可能导致恶意攻击。

有没有一种方法来实际执行这个?

+0

我编辑了你的问题,但我仍然不明白投诉背后的逻辑,当你从'.exe'改成'.jpg'时,它仍然是'image/jpg' ...我想你需要澄清你做了什么以及你的期望是什么。 – techraf

+0

所以我只是简单地将'.exe'文件重命名为'.jpg'文件,例如'bad_code.exe'重命名为'bad_code.exe.pdf'。我想正确识别这个文件的扩展名。 – bryansis2010

+4

可能没有一个正确的扩展名。文件可以是多边形文件,即同时有多种格式。然后解释取决于上下文。有关更多信息,请参阅https://events.ccc.de/congress/2014/Fahrplan/system/attachments/2562/original/Funky_File_Formats.pdf。 –

您可以通过设置禁止的MIME类型黑名单来反向执行检查。然后,对于这些MIME类型中的每一种,使用例如

mimetypes.guess_all_extensions('application/x-msdownload') 

产生一个可能的恶意扩展列表,然后您可以在上传的文件名中进行搜索。

警告。

依靠文件名和MIME类型来抵御恶意上传是not safe practice。至少,沙盒用户在单独的域中上传可以防止任何恶意代码滑过防御系统攻击您的网站。