django-axes是最直接可控的暴力破解防护方案,需要正确配置axes_FAILURE_LIMIT=5、AXES_LOCK_OUT_AT_FAILURE=True和AXES_COOLOFF_TIME=600,并确保Axesmidleware在Sessionmidleware之后,Authenticationmidleware之前,Axesbackend在Authentication_BACKENDS中排名第一。
django-axes 这是目前最直接、最可控的修复方案。它不依赖于你重写登录逻辑,也不要求你手动记录 IP 或者禁止状态——只要正确接入,就可以在 5 暴力破解者在几分钟内反复撞墙。
AXES_FAILURE_LIMIT 设成 5 还被绕过?
常见的错误是只改变限制次数,但不匹配 AXES_LOCK_OUT_AT_FAILURE 或 AXES_COOLOFF_TIME。
AXES_FAILURE_LIMIT = 5 只说“失败” 5 第二次触发锁定,但是否真的锁定,锁多久,取决于另外两个开关:
- AXES_LOCK_OUT_AT_FAILURE = True(默认 False,不设就等于不锁。
- AXES_COOLOFF_TIME = 600(单位秒,即 10 分钟;设为 None 永久锁定)
- 如果用的是 IP 还要注意等级锁定(默认):Nginx 或 CDN 之后的真实客户端 IP 可能被覆盖,需要同步配置 AXES_IPWARE_PROXY_COUNT 和 AXES_IPWARE_PROXY_HEADERS
axes.middleware.AxesMiddleware 添加在哪里生效?
必须加在 SessionMiddleware 之后、AuthenticationMiddleware 以前。顺序错误会导致:
- 未登录时,用户无法识别会话,axes 拿不到 session_key,误判为新请求
- 中间件加载顺序颠倒后,AXES_RESET_ON_SUCCESS = True 无效,成功登录不清楚计数
标准顺序示例:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'axes.middleware.AxesMiddleware', # ← 必须在这儿
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
]返回登录接口 403 却没进 axes 日志?
这通常意味着请求根本没有到达 AxesBackend。检查三件事:
- AUTHENTICATION_BACKENDS 是否把 axes.backends.AxesBackend 放在第一位?必须优先考虑吗? ModelBackend,否则,失败将由后者直接处理,axes 完全无感知
- 是否使用了登录视图 login() 函数?假如是手写的 authenticate() + login() 流程,但遗漏 request 参数传给 authenticate(),axes 不能得到上下文
- 是否启用了 AXES_ONLY_USER_FAILURES = True?该选项会让 axes 只计算已知用户名的失败(例如,如果攻击者盲目猜测用户名,则不计入)-虽然这可以减少意外伤害,但也会削弱保护力度
生产环境里 axes 如果记录飙升,数据库变慢怎么办?axes 默认情况下,所有的尝试都存储在数据库中,在高频攻击下很容易被拖垮 PostgreSQL 或 MySQL。
可行解法:
- 把 AXES_HANDLER = 'axes.handlers.cache.AxesCacheHandler',改用 Redis 缓存存储计(需要提前安装) django-redis 并配置 CACHES)
- 设置 AXES_META_TRUNCATE_LENGTH = 255,避免长 User-Agent 或 Referer 写满字段
- 定期清理:python manage.py axes_reset 或按需调用 axes.reset 不要等表膨胀到信号 GB 级再动手
真正容易被忽视的是:axes 默认锁定粒度 IP,但是大多数现代应用程序都在运行 Nginx + uWSGI 所有的请求似乎都来自 127.0.0.1.不配透传真实 IP,等于锁了一个孤独。
Python Django环境建设网站开发 WORD版
本文主要讲述Python Django环境建设网站开发;希望本文档能对有需要的朋友有所帮助;有兴趣的朋友可以来看看
下载