django中csrftoken跨站請求僞造的幾種方式

1.介紹html

咱們以前從前端給後端發送數據的時候,一直都是把setting中中間件裏的的csrftoken這條給註釋掉,其實這個主要起了一個對保護做用,以避免惡意性數據的攻擊。可是這樣直接註釋掉並非理智型的選擇,這裏咱們介紹如下幾種方式來解決這個問題。前端

csrf原理:先發送get請求,在用戶瀏覽器上藏一段隨機字符串,發送post請求時,瀏覽器自動攜帶該字符串來進行識別python

2.方式一ajax

在前端中添加{% csrf_token %},前端ajax發送的data數據中加上:django

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添加默認參數cookie

$.ajaxSetup({
        headers: {"X-CSRFToken": $.cookie('csrftoken')},
    });

PS:遇到問題沒人解答?須要Python學習資料?能夠加點擊下方連接自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76post

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')
相關文章
相關標籤/搜索