增加 Django 登录安全性和密码强度

Increasing Django login security and password strengths

当我创建 Django 超级用户时,如果我尝试添加一个弱密码 Django 不允许我,但对于普通用户,在管理员中,或使用注册表单我可以添加非常简单的密码。

  1. 如何将创建超级用户的密码验证通知给所有用户?
  2. 能否限制登录失败次数(我更喜欢没有第三方)

创建用户或超级用户时都使用相同的 Django 配置设置 AUTH_PASSWORD_VALIDATORS,如果不进行修改,它将包含一个验证器列表,在通过 Django 管理创建用户时,所有密码都将根据这些验证器进行验证。 这也是您加强验证器的地方,如果您想要更严格,可以添加更多,如果您想要更宽松,可以删除。

但是,如果您通过管理命令 create_usercreate_superuser 创建用户,则此验证器列表将不适用。这是因为 Django 假定只有开发人员在这个级别与 Django 交互。

对于你的第二个问题,Django 没有内置支持登录尝试和后续阻止进一步登录的内容。这是来自第 3 方应用程序(例如 django-defender 或来自自己的实现)的内容。

该实施的主要内容是

  1. 添加一个新的table存储尝试次数的机制

  2. 在 settings.py 添加新设置 LOGIN_ATTEMPTS = 3

  3. 覆盖您检查此 table 尝试
  4. 的用户的登录流程
  5. 如果尝试增加计数器失败,如果成功则重置计数器。
  6. 如果用户达到尝试次数限制,请将用户 is_active 设置为 False 并始终从您的 login 覆盖中设置 return False