此Django应用程序添加了一个新的字段类型,ValidatedFileField,该字段类型增加了检查用户可能发送的文档大小和类型的 功能。
项目描述
此Django应用程序添加了一个新的字段类型,ValidatedFileField,该字段类型增加了检查用户可能发送的文档大小和类型的 功能。
安装
使用python setup.py install下载并安装包。
请注意,此包依赖于python-magic(用于检查字段类型)。
将‘validatedfile’添加到settings.py中的INSTALLED_APPS中。
验证单个文件
创建一个模型并添加一个类型为ValidatedFileField的字段。您可以添加最大大小(以字节为单位)和允许的有效MIME类型列表。所有MIME类型的列表可在此处找到: http://www.iana.org/assignments/media-types/index.html
from django.db import models from validatedfile.fields import ValidatedFileField class TestModel(models.Model): the_file = ValidatedFileField( null = True, blank = True, upload_to = 'testfile', max_upload_size = 10240, content_types = ['image/png'])
此模型可以像正常FileField一样在表单或模型表单中使用。如果用户尝试上传过大或没有有效类型的文件,将发生表单验证错误。
验证配额使用情况
此示例还检查一个用户上传的所有文件的总大小
(in models.py) from django.contrib.auth.models import User from django.db import models from validatedfile.fields import ValidatedFileField class TestModel(models.Model): user = models.ForeignKey( User, null = False, blank = False, related_name = 'test_models') the_file = ValidatedFileField( null = True, blank = True, upload_to = 'testfile', max_upload_size = 10240, content_types = ['image/png']) (in forms.py) from django import forms from validatedfile.fields import QuotaValidator from models.py import TestModel class TestModelForm(models.ModelForm): the_file = forms.FileField( required = True, validators = [QuotaValidator(max_usage = 102400)]) class Meta: model = TestModel fields = ['the_file'] def __init__(self, user, *args, **kwargs): super(TestModelForm, self).__init__(*args, **kwargs) self.user = user self.fields['the_file'].validators[0].update_quota( items = self.user.test_models.all(), attr_name = 'the_file', ) def exceeds_quota(self): return self.fields['the_file'].validators[0].quota.exceeds() def save(self, *args, **kwargs): model = super(TestModelForm, self).save(commit = False) model.user = self.user model.save()
关于DOS攻击的说明
重要提示:文件大小检查是在整个文件上传到服务器并存储在临时目录(如果文件较小,则存储在内存中)后由Django进行的。因此,这对于保证用户的配额很有用,例如,但不会阻止想要通过发送大文件(例如数GB)来阻塞服务器的攻击用户。
为了避免这种情况,您需要配置您的前端以限制上传文件的大小。如何操作取决于您使用的软件。例如,如果您使用Apache,应使用 LimitRequestBody 指令(https://httpd.apache.ac.cn/docs/2.2/mod/core.html#limitrequestbody)。
这是一个补充措施,因为您通常希望超过合理大小的普通用户收到友好的表单验证消息,而攻击用户将在文件上传完成之前看到他们的连接突然中断。因此,建议将 max_upload_size 设置为一个较小的值(例如5Mb),并将 LimitRequestBody 设置为一个较大的值(例如100Mb)。
项目详情
django-validated-file-2.0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ed77cf26aa64447f118884ed74276302bd855bbef45d1e405fdb2a560538eee2 |
|
MD5 | d40ee5b7d8a7eacd9d622f91683e9b1f |
|
BLAKE2b-256 | 8db130fcb9bea5a4be4220853f6b1ad5ef4f8bdd551e405070ce0259b28e7c0d |