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'));
}
}
});
浙公网安备 33010602011771号