csrf跨站请求

一、csrf跨站请求主要分为两种情况

  • 1、使用form表单提交数据的时候
  • 2、利用ajax提交数据的时候

二、在form表单提交数据的时候只要在表单中添加csrf_token

三、使用ajax提交数据的时候

  • 1、在页面中添加csrf_token

  • 2、定义获取获取cookie的方法

    // 定义一个获取本地cookie
    function getCookie(name) {
        var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
        return arr != null ? unescape(arr[2]) : null;
    }
    
  • 3、发送ajax请求

    // 定义一个校验的方法
    function csrfSafeMethod(method) {
        // these HTTP methods do not require CSRF protection
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    }
    
    // 发送前的
    $.ajaxSetup({
        beforeSend: function (xhr, settings) {
            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
            }
        }
    });
    $('#btn').on('click', function () {
        $.ajax({
            url: '/test1/',
            method: 'post',
            data: {
                username: $('#name').val()
            },
            success: function (data) {
                console.log(data)
            }
        })
    })
    

四、关于取消csrf跨站请求的方式

  • 1、在settings.py中取消中间件
  • 2、使用本章节第五小节中的装饰器方式

results matching ""

    No results matching ""