Django中预防CSRF攻击的原理与实现步骤

拾柒
拾柒
发布时间:2026-10-13| 4人浏览过
原创

本文详解Django中预防CSRF(跨站请求伪造)攻击的机制。通过后端在Cookie中设置csrf_token,前端表单提交时携带该Token,服务端比对两者一致性来验证请求合法性。文章包含具体代码示例及URL重定向配置,帮助开发者保障用户隐私与财产安全。

CSRF攻击原理与危害

CSRF的全称为Cross Site Request Forgery,中文译名为跨站请求伪造。

CSRF攻击的核心在于攻击者盗用用户的身份凭证,以合法用户的名义发起恶意请求。

此类攻击可能包括:以用户名义发送电子邮件、发布消息、盗取账户权限,甚至执行商品购买或虚拟货币转账等操作。

CSRF攻击导致的后果主要包括个人隐私信息的泄露以及用户财产的安全风险。

CSRF攻击示意图

当客户端访问服务器时,若未进行严格的安全验证,则容易遭受此类攻击。

Django中防止CSRF攻击的实现步骤

防止CSRF攻击

实施步骤如下:

1. 当客户端向后端请求页面数据时,后端会在响应中的Cookie里设置csrf_token的值。

2. 在HTML Form表单内部添加一个隐藏字段,其值同样为csrf_token。

3. 当用户点击提交按钮时,请求将同时携带Cookie中的值和表单中隐藏字段的值向后台发起。

4. 后端接收到请求后,执行以下处理流程:

4.1 从Cookie中提取csrf_token。

4.2 从表单数据中提取隐藏的csrf_token值。

4.3 对这两个值进行对比验证。

5. 若比较两个值(经过算法运算得出的结果)一致,则判定为正常请求;若未获取到值或对比不一致,则判定为非正常请求,不执行后续操作。

CSRF Token配置与代码示例

CSRF_TOKEN的设置过程

创建视图类

添加路由

添加表单

在form里添加语句


<form method="post" action="/tpl/csrf">
  {{ csrf_input }}
<p>
 <label for="fave">Fruit: <input id="fave" name="fave" /></label>
</p>
<p>
 <label for="name">Name: <input id="name" name="name" /></label>
</p>
<button>提交</button>
</form>

Django URL重定向配置

补充知识:Django实现url跳转(重定向)

编辑urls.py文件如下:


from django.urls import path, include
from django.views.generic import RedirectView
 
urlpatterns = [
  path('polls/', include('polls.urls')),
  path('', RedirectView.as_view(url='polls/')),
 
]

上述配置表示将根域名xxx.com的请求重定向至xxx.com/polls/。

以上关于在Django中预防CSRF攻击的操作内容即为分享的全部信息,希望能为大家提供参考,也欢迎大家继续支持本站。

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

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 算法库。