gpt4 book ai didi

django - 如何使用 django 保护文件上传

转载 作者:行者123 更新时间:2023-12-05 01:15:41 25 4
gpt4 key购买 nike

通过将文件上传到服务器,下面的代码效果很好。

请问如何通过检查文件大小(例如 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()

最佳答案

您不能信任文件的任何元数据来确定内容。我可以向您发送一个可以在您的机器上执行的扩展名为 .txt 的文件。

处理此问题的唯一相对安全的方法是检查内容。这并不简单,因此您应该使用现有的第三方库之一,如 python-magic .

即便如此,还是有办法绕过这一点,将内容包裹在其他内容的评论字段中,等等。

您不应永远执行用户提交的内容。

关于django - 如何使用 django 保护文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55293979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com