基于缓存的django应用程序,在多次登录失败后锁定用户。
django-lockout的Python项目详细描述
django-lockout是一个基于缓存的django应用程序,在 许多登录尝试失败。因为django-lockout跟踪登录尝试 在你的网站缓存中,它是快速和轻量级的。是为Django准备的 在没有暴力攻击的情况下 额外的数据库开销。
django-lockout包装django.contrib.auth.authenticate并引发 lockout.LockedOut出现过多登录尝试。你的观点是 负责捕获和处理LockedOut,不管您认为是什么 适当的。django-lockout的中间件类存储请求对象 在线程本地名称空间中提供包装的auth.authenticate 函数访问它。
登录尝试可由IP Only或IP Plus用户代理跟踪。
要求
django-lockout是为django 1.3设计的。它也适用于django 1.0, 1.1和1.2,除了测试套件(它依赖于 django.test.client.RequestFactory)。如果将django-lockout与 早于1.3的django版本,不应将'lockout'添加到 INSTALLED_APPS。
django-lockout要求您为站点启用了缓存。
安装
您可以使用以下命令安装django-lockout:
pip install django-lockout
或:
easy_install django-lockout
将'lockout.middleware.LockoutMiddleware'添加到MIDDLEWARE_CLASSES中。 它应该出现在django的AuthenticationMiddleware:
MIDDLEWARE_CLASSES = [ 'lockout.middleware.LockoutMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ... ]
仅当您希望将'lockout'添加到INSTALLED_APPS时才需要 运行django-lockout的测试套件。
用法
下面是一个如何使用django-lockout:
try: user = auth.authenticate(username=username, password=password) except LockedOut: messages.warning(request, 'Your account has been locked out because of too many failed login attempts.')
如果需要清除IP或IP Plus的失败尝试记录 用户代理,调用lockout.reset_attempts,为此传递request。 IP或IP Plus用户代理:
reset_attempts(request)
设置
- 锁定最大尝试次数
- 在IP或IP加上用户代理之前的最大登录尝试次数 被锁在外面。默认值:5.
- 锁定时间
- 应锁定IP或IP Plus用户代理的秒数。 默认值:600(10分钟)。
- 锁定执行窗口
重置失败登录尝试之前的秒数,以及 IP或IP Plus用户代理有了新的开始。默认值:300(5分钟)。
LOCKOUT_ENFORCEMENT_WINDOW最多影响失败的登录尝试 允许,而LOCKOUT_TIME在最大尝试次数为 达到。例如,如果LOCKOUT_ENFORCEMENT_WINDOW为5分钟, 假设用户的登录尝试失败,然后是另一个失败 3分钟后尝试登录。两次尝试都将计入 最大值。但是,如果5分钟标记(从第一次失败的尝试开始)是 如果尝试次数少于允许的最大次数,则失败将过期 并且用户将再次允许最大尝试。如果用户 超过LOCKOUT_ENFORCEMENT_WINDOW内的最大值,用户将 锁定LOCKOUT_TIME秒。
- 锁定用户代理
- 是否跟踪IP Plus用户代理的失败登录尝试,而不是 仅限IP。默认值:False.
- 锁定缓存前缀
- 由django-lockout生成的缓存键的前缀。默认值:'lockout'.