Django的csrf中间件
csrf: 跨站请求伪造(Cross Site Request Forgery)
后端csrf的使用
1、全局使用或禁用
若需全局禁用csrf在settings.py中将MIDDLEWARE
中的'django.middleware.csrf.CsrfViewMiddleware'
注释即可若使用则不需做其他操作
2、局部使用或禁用
from django.views.decorators.csrf import csrf_exempt, csrf_protect
导入以上代码
若使用csrf则在定义的函数上方添加@csrf_protect
,反之,则添加@csrf_exempt
前端csrf的使用
1、form表单
在表单内加入{%csrf_token%}
即可
2、Ajax方式
function submit() {
{# 拿数据#}
var name = $("#input1").val();
var csrf_token = $.cookie("csrftoken");
console.log(csrf_token);
$.ajax({
url:"/app01/cz", # 路径
data:{
"input1": input1,
"csrfmiddlewaretoken": csrf_token
},
method:"post",
success: function (res) {
console.log(res);
}
})
}
- 总结
- 1、什么是csrf: 跨站请求伪造Cross Site Request Forgery
- 2、举例子:什么是跨站请求攻击:用户a 访问可信站点1做业务处理,此时浏览器会保存该网站的cookie,当用户a 访问不可信站点2时,如果站点2有指向站点1的链接时候,那么攻击就用可能发生
- 3、Django怎么做的:使用了csrf的中间件,具体操作是这样的,当浏览器第一次和Django服务交互的时候,后台会生成一个唯一标识码, 放入到前端,同时后台也保存,那么之后再提交数据 服务端就会做csrf的校验,如果通过那么就正常处理,否则返回403
- 4、使用:前端 ①、form表单的{% csrf_token %} ② 、Ajax方式
后端 ①、全局使用 ②、局部csrf_protect(使用CSRF验证)
与csrf_exempt(不使用CSRF验证)