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

Django的CSRF验证机制具体是怎样的?

Django CSRF 验证机制详解

没错,你对Django CSRF验证逻辑的理解完全在线!我来把这个过程拆解得更清晰:

核心处理中间件

整个CSRF验证流程是由CsrfViewMiddleware这个中间件全权负责的,它会在请求处理的环节自动完成令牌校验。

待比对的两组令牌

验证时会从两个维度获取令牌,然后进行匹配:

  • 请求侧提交的令牌:
    • 如果是POST表单请求,从request.POST.get('csrfmiddlewaretoken', '')提取表单里的令牌字段
    • 如果是AJAX这类非表单请求,从request.META.get(settings.CSRF_HEADER_NAME, '')提取请求头里的令牌(默认请求头字段是HTTP_X_CSRFTOKEN)
  • 服务器端存储的令牌:
    • 从用户session中获取:request.session.get(CSRF_SESSION_KEY)
    • 从用户Cookie中获取:request.COOKIES[settings.CSRF_COOKIE_NAME](默认Cookie名为csrftoken)

解密比对逻辑

这里有个关键细节:上面两组拿到的令牌本身是不同的字符串,不能直接对比。必须通过Django内部的_unsalt_cipher_token函数对两者分别解密,解密后会得到相同的核心密钥内容(就是你提到的secr...那段)。只有解密后的内容完全一致,CSRF验证才会通过。

内容的提问来源于stack exchange,提问作者Jibin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:10:08