Django用户密码中的max_length是多少?

时间:2019-07-06 11:05:16

标签: python django django-models django-forms

我的问题是我不确定,因为我不了解Django中password字段的工作方式,也就是说,我认为该字段没有任何max_length,并且可以使用缓冲区溢出。这可能吗?

我正在使用默认的Django用户。

2 个答案:

答案 0 :(得分:1)

Django的默认用户模型(django.contrib.auth)通过docs中所述的用户名和密码进行身份验证。

  

原始密码未存储在数据库中;而是一个散列   存储密码的版本,并在每次计算哈希值   用户尝试登录。

默认的密码哈希器是计算昂贵的,以增加使用蛮力方法进行攻击的难度。

  

Django对明文的长度不加任何限制   密码,这意味着攻击者可以简单地任意提交大文件   (和保证失败的)密码,迫使运行Django的服务器在   尝试检查密码。密码大小为1 MB,用于   例如,大约需要一分钟的计算时间才能检查   使用PBKDF2哈希器。

     

这允许通过重复提交拒绝服务攻击   大量的密码,占用了昂贵的服务器资源   计算相应的哈希值。

在适当的模型中,django.contrib.auth.base_user密码字段是用max_length=128定义的。

class AbstractBaseUser(models.Model):
    password = models.CharField(_('password'), max_length=128)

答案 1 :(得分:0)

我在其中找到:To remedy this, Django's authentication framework will now automatically fail authentication for any password exceeding 4096 bytes

https://www.djangoproject.com/weblog/2013/sep/15/security/

如果您只关心User模型中的密码,则可能为191。请阅读https://docs.djangoproject.com/en/2.2/ref/contrib/auth/#user-model