Python 限制Django上的文件上载类型
我正在实现一种在运行python 3.4的Django 1.8上限制文件上传的方法 基本上,我想在上传文件时使用Python 限制Django上的文件上载类型,python,django,security,Python,Django,Security,我正在实现一种在运行python 3.4的Django 1.8上限制文件上传的方法 基本上,我想在上传文件时使用MIMEType检查文件的MIMEType。但是,当我将文件名从bad_image.exe处理为bad_image.exe.jpg时,mimetype仍然是image/jpeg。这仍可能导致恶意攻击 有没有一种方法可以真正实现这一点?我也尝试了magic,但它仍然不起作用。没错,请将文件.exe重命名为.exe.jpg和内容类型输出(图像/jpeg) 但是使用if正确地检查文件就像检查
MIMEType
检查文件的MIMEType。但是,当我将文件名从bad_image.exe
处理为bad_image.exe.jpg
时,mimetype仍然是image/jpeg
。这仍可能导致恶意攻击
有没有一种方法可以真正实现这一点?我也尝试了
magic
,但它仍然不起作用。没错,请将文件.exe
重命名为.exe.jpg
和内容类型
输出(图像/jpeg)
但是使用if正确地检查文件就像检查它们的头而不是扩展名一样,因此输出在我的测试中:
PE32可执行文件(GUI)英特尔80386,适用于MS Windows
即使如此,我认为标题可能会被修改。。。希望有帮助
编辑:在我的测试中使用
这太简单了,但只是为了测试。您好,我可以问一下,既然上传的文件存储在内存中,我如何访问该文件?我更新了答案。在这种情况下,可以上载文件,但可以检查类型和扩展名,并发送表单错误。
class UploadFileForm(forms.ModelForm):
class Meta:
model = FileTestUpload
fields = ('title','file')
def clean_file(self):
f = self.cleaned_data.get("file", False)
ftype = magic.from_buffer(f.read()) # InMemoryUploadedFile
print ftype
return f