CSRF跨站请求伪造

CSRF跨站请求伪造

 

  • 方法一

将    “csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()”放在POST的请求体中。

 

  • 方法二

在ajax的请求头中增加X-CSRFToken的请求头,对应的值只能是cookie中的csrftoken的值。

所以我们要从cookie中提取csrftoken的值,jQuery不能去cookie,我们使用jquery.cookie的插件。

HTML中导入jquery.cookie.js

 1 <script src="/static/jquery-3.3.1.min.js"></script>
 2 <script src="/static/jquery.cookie.js"></script>
 3 <script>
 4  
 5     $('#login').click(function () {
 6         $.ajax({
 7             url: '/login_ajax/',
 8             type: 'post',
 9             headers:{ "X-CSRFToken":$.cookie('csrftoken') },
10             data: {
11                 user: $('[name="user"]').val(),
12                 pwd: $('[name="pwd"]').val()
13             },
14             success: function (data) {
15                 data = JSON.parse(data);
16                
17             }
18         })
19     })
20 </script>
  • 方法三

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

    • ,在请求体中添加CSRF键值对。
$.ajaxSetup({
    data: {
        csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),
    }
});
    • 设置请求头  
$.ajaxSetup({
    headers: {"X-CSRFToken": $.cookie('csrftoken')},
});
  • 方法四

官方推荐方法(用到jquery.cookie)

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", $.cookie('csrftoken'));
        }
    }
});

 

   

posted on 2018-07-21 14:12  弃疾  阅读(91)  评论(0)    收藏  举报

导航