django中csrftoken跨站请求伪造的几种方式

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')},
    });

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')

 

转载于:https://www.cnblogs.com/MayDayTime/p/9675881.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值