Django CSRF防护

本文介绍了CSRF(跨站请求伪造)的概念及工作原理,并详细解释了Django如何验证请求是否为CSRF攻击,同时提供了几种常见的CSRF防护机制实现方法,最后简述了如何在特定情况下取消CSRF防护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


参考视频:https://ke.qq.com/course/320021

一、CSRF是什么

CSRF(Cross Site Request Forgery):跨站请求伪造,实现的原理是CSRF攻击者在用户已经登录目标网站之后,诱使用户访

问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。

二、CSRF工作原理

Django怎么验证一个请求是不是CSRF?

Django处理客户端请求时,会生成一个随机Token,放到Cookie里一起返回,然后需要前端每次POST请求时带上这个Token,

可以放到POST数据里键为csrfmiddlewaretoken,或者放到请求头键为X-CSRFToken,Django从这两个位置取,每次处理都会

拦截验证,通过比对两者是否一致来判断这个请求是不是非法,非法就返回403状态码

三、使用CSRF防护机制

常见有三种方法可以携带CSRF Token发送给服务端

• from表单添加{% csrf_token %}标签,表单会携带一同提交

<form method="post">
	{% csrf_token %}
	用户名: <input type="text" name="username"><br>
	密码: <input type="text" name="password"><br>
	<button type="submit">登录</button>
</form>

• 如果你是Ajax请求,需要把csrf token字符串(也是通过拿{% csrf_token %}标签产生的值)放到data里一起提交,并且键名为csrfmiddlewaretoken或者放到请求头传递服务端

csrfmiddlewaretoken = $('input[name=csrfmiddlewaretoken]').val();
var data = {'id': '123', 'csrfmiddlewaretoken': csrfmiddlewaretoken};
$.ajax({
	type: "POST",
	url: "/api",
	data: data,
	dataType: 'json'
})

• 指定取消某函数视图CSRF防护

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def login(request):

四、取消CSRF防护机制

在settings.py中注释该行
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值