下面的代码通过将文件上传到服务器,效果很好。
请我如何通过检查文件大小(例如2mb),文件扩展名, 进行Mimetype文件检查和其他检查,以确保仅上传.jpg,.gif,.png之类的图片,而不上传病毒。
model.py
from django.db import models
# Create your models here.
class File(models.Model):
file = models.FileField()
def __str__(self):
return self.file.name
View.py
from django.shortcuts import render
from django.core.files.storage import FileSystemStorage
from .models import File
import os, datetime
from .forms import uploadForm
# Create your views here.
def index(request):
if request.method == 'POST' and request.FILES:
form = uploadForm(request.POST,request.FILES)
if form.is_valid():
file = request.FILES['file']
# process the data in form.cleaned_data as required
file_object = form.cleaned_data['file']
extension = os.path.splitext(file_object.name)[1]
rename = datetime.datetime.now().strftime("%Y_%m_%d %H_%M_%S") + extension
fss = FileSystemStorage()
filename = fss.save(rename, file_object)
file = File(file=rename)
file.save()
upload_file_path = fss.path(filename)
return render(request, 'file/index.html', {
'upload_file_path': upload_file_path})
print('uploaded')
else:
print("Not Valid")
else:
return render(request, 'file/index.html')
forms.py
from django import forms
class uploadForm(forms.Form):
#file = forms.CharField()
file = forms.FileField()
答案 0 :(得分:1)
您不能信任文件的任何元数据来确定内容。我可以向您发送扩展名为.txt
的文件,该文件可以在您的计算机上执行。
处理此问题的唯一相对安全的方法是检查内容。这并不简单,因此您应该使用现有的第三方库之一,例如python-magic。
即使那样,也有一些方法可以愚弄它,将内容包装在其他内容的注释字段中,等等。
您应该从不执行用户提交的内容。