You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:50:18