Django中关于csrf_token的认证

一、介绍:

  为了网站网站的安全,防止XSS等恶意数据性攻击。Django中提供了一个模块用以提供csrf认证。在使用之前我们先介绍下在Django中csrf的认证原理。
   csrf原理:在访问是会先发送一个GET的请求,将自己生成的验证字符串存放在客户端的cookie中,当客户端发送POST请求时,需携带该字符串进行认证。

二.认证方式:

  1.客户端直接post请求认证:

    在前端的form表单中直接添加 {% csrf_token %}便可通过认证

<form action="/login/" method="POST">
        {% csrf_token %}
        <input type="text" name="user" />
        <input type="text" name="pwd" />
        <input type="submit" value="提交" />
</form>

  2.客户端用ajax方式提交认证:

   2.1:在ajax中添加X-CSRFToken的请求头,必须从cookie中取csrftoken的值(对单一ajax请求处理)

$.ajax({
            type: "POST",
            url:"/login/",
            dataType: "json",
            headers: {'X-CSRFtoken': $.cookie('csrftoken')},
            data:{
                "account_code":$('#account_login').find("input[name=account_code]").val(),
                "pwd":$.sha256(pwd_const+$('#account_login').find("input[name=pwd]").val()),
            },
            error: function(request) {
                alert("Connection error");
            },
            success: function(data) {
                var success = data.status;
                if (success) {
                    window.location="/login/home/";
                } else {
                    $("#msg-info").html(data.message).css('color', 'red');
                    $('#msg-info').show();
                }
            }
        });

 2.2:使用$.ajaxSetup()给全局的ajax添加默认参数

        $.ajaxSetup({
                beforeSend: function(xhr,settings){
                    xhr.setRequestHeader('X-CSRFtoken', $.cookie('csrftoken'));
                }
            });

   注意:使用ajax提交数据时,如果我们前端没有csrf_roken的值会验证失败。此时我们还需要在客户端添加一个装饰器ensure_csrf_cookie(),使服务端提前发送csrf_token用以验证

from django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
def login(request):
    return render(request, 'login.html')

 

转载于:https://www.cnblogs.com/Jack-Kong/p/10149641.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值