我的问题是我不确定,因为我不了解Django中password字段的工作方式,也就是说,我认为该字段没有任何max_length,并且可以使用缓冲区溢出。这可能吗?
我正在使用默认的Django用户。
答案 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