django中csrftoken跨站请求伪造的几种方式
程序员文章站
2022-05-22 22:21:45
1.介绍 我们之前从前端给后端发送数据的时候,一直都是把setting中中间件里的的csrftoken这条给注释掉,其实这个主要起了一个对保护作用,以免恶意性数据的攻击。但是这样直接注释掉并不是理智型的选择,这里我们介绍以下几种方式来解决这个问题。 csrf原理:先发送get请求,在用户浏览器上藏一 ......
1.介绍
我们之前从前端给后端发送数据的时候,一直都是把setting中中间件里的的csrftoken这条给注释掉,其实这个主要起了一个对保护作用,以免恶意性数据的攻击。但是这样直接注释掉并不是理智型的选择,这里我们介绍以下几种方式来解决这个问题。
csrf原理:先发送get请求,在用户浏览器上藏一段随机字符串,发送post请求时,浏览器自动携带该字符串来进行识别
2.方式一
在前端中添加{% csrf_token %},前端ajax发送的data数据中加上:
csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()
3.方式二
在ajax中添加x-csrftoken的请求头,必须从cookie中取csrftoken的值
$('#login').click(function () { $.ajax( { url:{% url 'login' %}, type: 'post', headers:{ "x-csrftoken":$.cookie('csrftoken') }, data: { user: $('[name="user"]').val(), pwd: $('[name="pwd"]').val() }, success: function (data) { data = json.parse(data); if (data.status) { window.location = data.url } else { alert('登陆错误') } } } ) })
4.方式三
使用$.ajaxsetup()给全局的ajax添加默认参数
$.ajaxsetup({ headers: {"x-csrftoken": $.cookie('csrftoken')}, });
ps:遇到问题没人解答?需要python学习资料?可以加点击下方链接自行获取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76
5.方式四
在需要设置cookie的视图上加装饰器 ensure_csrf_cookie()
from django.views.decorators.csrf import ensure_csrf_cookie @ensure_csrf_cookie def server(request): return render(request, 'server.html')