Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 限制Django上的文件上载类型_Python_Django_Security - Fatal编程技术网

Python 限制Django上的文件上载类型

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正确地检查文件就像检查

我正在实现一种在运行python 3.4的Django 1.8上限制文件上传的方法

基本上,我想在上传文件时使用
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