CSRF验证失败请求中止问题求助(附相关配置参数)
1. 修复Cookie安全配置冲突
你的配置存在规则矛盾:
SESSION_COOKIE_SECURE = True要求会话Cookie仅通过HTTPS传输CSRF_COOKIE_SECURE = False允许CSRF Cookie通过HTTP传输- 同时开启的HSTS配置会强制浏览器使用HTTPS访问站点
这种混合设置会导致浏览器Cookie传输逻辑混乱,可能因HSTS强制HTTPS,但CSRF Cookie未标记为secure被拦截,最终无法发送到后端。
修正建议:
根据站点实际使用的访问协议统一配置:
- 若使用HTTPS:
SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_SSL_REDIRECT = True - 若仍使用HTTP:
SESSION_COOKIE_SECURE = False CSRF_COOKIE_SECURE = False SECURE_HSTS_SECONDS = 0 SECURE_HSTS_PRELOAD = False SECURE_HSTS_INCLUDE_SUBDOMAINS = False
2. 修正CSRF_TRUSTED_ORIGINS配置
当前配置存在两处问题:
- 重复添加
http://example.com条目,无实际作用 http://.*这种纯正则通配符格式不符合Django要求(4.0+版本需配置完整域名/前缀,不支持此类模糊匹配)
修正建议:
根据实际访问域名精确配置,示例:
CSRF_TRUSTED_ORIGINS = ['http://example.com', 'http://www.example.com']
若站点使用HTTPS,需改为https://example.com格式。
3. 排查浏览器端问题
- 强制清除浏览器缓存及站点相关Cookie,尤其是CSRF Cookie和会话Cookie
- 使用浏览器隐身模式测试,排除插件或本地缓存干扰
4. 验证Nginx反向代理配置(若有)
如果通过Nginx反向代理部署,需确保配置正确传递请求头部,让Django识别真实请求协议和来源:
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host;
同时检查Nginx是否存在拦截、修改Cookie的规则。
5. 检查Django版本兼容性
部分Django版本在CSRF Cookie与HSTS组合场景下存在已知问题,确认当前版本是否有相关补丁,必要时升级至稳定版本。
内容的提问来源于stack exchange,提问作者David Henson
相关产品推荐
相关产品推荐

