Django POST请求CSRF防护:JS自动注入与配置调整方案

星野
星野
发布时间:2026-10-13| 5人浏览过
原创

本文介绍在Django中使用POST方法时处理CSRF(跨站请求伪造)保护的两种方案。一是通过引入自定义JavaScript文件,利用Ajax自动从Cookie读取csrftoken并注入请求头,简化前端表单处理;二是针对非Web端或特定需求,提供修改settings.py中MIDDLEWARE配置删除CsrfViewMiddleware的方法,以及在HTML表单中直接添加{% csrf_token %}标签的标准做法,帮助开发者根据实际场景选择合适的安全策略。

Django POST请求CSRF防护:JS自动注入与配置调整方案

根据相关资料,在Django框架中发起POST请求时,为防止CSRF(跨站请求伪造)攻击,系统要求生成随机验证码。以下提供一种经过修改的便捷实现方式:

注意:这是一个JavaScript文件,需要将其引入到HTML模板中,具体引用方式如下:<script src="/static/javascript/post_need_csrftoken.js"></script>

相比直接使用{% csrf_token %}标签,上述方法操作更为简便。

JavaScript自动注入Token实现


$(function () {
  $.ajaxSetup({
    headers: { "X-CSRFToken": getCookie("csrftoken") }
  });
});


    // 为防止CSRF(Cross-site request forgery)跨站请求伪造,发post请求时需要在cookie中创建随机码
    function getCookie(name)
    {
      var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
      /*
        上面这句话相当于:
      var arr;
      var reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
       */
      if(arr=document.cookie.match(reg))
        return decodeURI(arr[2]);  //ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,
                      // 因此应该用 decodeURI() 和 decodeURIComponent() 取而代之。
      else
        return null;
    }

Django解决POST请求CSRF报错:JavaScript自动获取Token与中间件配置指南

补充知识:解决Django前端或客户端POST请求失败时提示csrf_token相关错误的问题。

中间件配置调整与表单标准做法

解决方法:打开settings.py文件,找到MIDDLEWARE配置项。

django.middleware.csrf.CsrfViewMiddleware

将其从列表中删除即可解决报错。

如果不想删除该中间件,且项目为Web端应用,只需在HTML的form表单内部添加一行{% csrf_token %}即可正常提交。


<form>
  {%csrf_token%}
  <!-- 其它代码 -->
</form>

CSRF机制主要起到保护验证的作用,具体是否保留取决于个人项目需求。

如果是安卓或其他非Web端应用,建议采用前一种方式,即删除上述代码行。

以上关于Django POST请求中增加CSRF Token的示例内容,旨在为读者提供参考,希望对大家有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。