Django 是一个高级 Python Web 框架,鼓励快速开发和简洁、务实的设计。它由经验丰富的开发人员构建,解决了 Web 开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费且开源的。
https://github.com/django/django
https://github.com/django/django/releases/tag/4.2.2
当处理电子邮件和URL的域名标签数量非常大时,可能会导致正则表达式拒绝服务攻击。这是因为正则表达式的处理时间与输入的长度呈指数关系,如果输入的长度非常大会导致处理时间过长,实现DoS。
漏洞分析
在URLValidator中,增加了一个max_length属性,其值为2048,用于限制URL的最大长度。如果URL的长度超过这个值,将会抛出一个验证错误。
class URLValidator(RegexValidator):
…
max_length = 2048
…
def __call__(self, value):
if not isinstance(value, str) or len(value) > self.max_length:
raise ValidationError(self.message, code=self.code, params={‘value‘: value})
对于EmailValidator,同样增加了长度的限制。根据RFC 3696的第3节,电子邮件的最大长度为320个字符。如果电子邮件的长度超过这个值,也将抛出一个验证错误。
class EmailValidator:
…
def __call__(self, value):
if not value or ‘@’ not in value or len(value) > 320:
raise ValidationError(self.message, code=self.code, params={‘value‘: value})
在EmailField中,将max_length的默认值设置为320,以符合RFC 3696的规定。
class EmailField(CharField):
…
def __init__(self, **kwargs):
kwargs.setdefault(“max_length“, 320)
super().__init__(strip=True, **kwargs)
这些修改都是为了限制输入的长度,从而防止正则表达式处理时间过长,避免了ReDoS攻击。
攻击者可以通过提供一个超过长度限制的URL来触发这个漏洞。例如可以提供一个长度超过253个字符的URL。当这个输入被URLValidator处理时,由于正则表达式的处理时间与输入的长度呈指数关系,所以可能会导致处理时间过长实现导致服务拒绝。
版本链接:
https://www.djangoproject.com/weblog/2023/jul/03/security–releases/
https://www.djangoproject.com/weblog/2023/jul/03/security–releases/
https://github.com/django/django/commit/b7c5feb35a31799de6e582ad6a5a91a9de74e0f9
原文地址:https://blog.csdn.net/LJQClqjc/article/details/131637860
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32022.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!