首頁 >後端開發 >Python教學 >為什麼我的 Django CSRF 檢查會因 Ajax POST 請求而失敗?

為什麼我的 Django CSRF 檢查會因 Ajax POST 請求而失敗?

DDD
DDD原創
2024-12-04 13:41:14309瀏覽

Why is My Django CSRF Check Failing with an Ajax POST Request?

Django CSRF 檢查因Ajax Post 請求而失敗

如Django 文件所述,啟用惡意功能保護有助於防止惡意跨站點請求攻擊。按照說明,您嘗試透過 Ajax 發布實作 CSRF 檢查,但仍然遇到拒絕。

要解決此問題,請考慮以下步驟:

  1. 驗證令牌是否存在:
    確保JavaScript 程式碼正在取得CSRF 令是否存在:

    $.post("/memorize/", data, function (result) { ... });
    
    var csrftoken = getCookie('csrftoken');
    xhr.setRequestHeader("X-CSRFToken", csrftoken);
    確保JavaScript 程式碼正在取得CSRF 令是否存在:
  2. 確保JavaScript 程式碼正在取得CSRF 令是否存在:確保JavaScript 程式碼正在取得CSRF 命令牌並將其儲存在名為csrftoken 的變數中。在設定標頭之前應存在此令牌:
  3. 確保令牌使用:
  4. 取得令牌後,在Ajax 請求的標頭中顯式設定它使用setRequestHeader。
  5. 檢查回應正文:
    檢查來自 Django 的回應正文,查看它是否明確提及缺失或無效的 CSRF 令牌。

    $.ajax({
        data: {
            csrfmiddlewaretoken: '{{ csrf_token }}',
            ...  // Other data
        },
    });
  6. 替代方法(使用資料正文):而不是設定標頭,您可以將 CSRF 令牌嵌入到 Ajax在請求的資料正文中,如下所示:

啟用偵錯:透過在設定中加入DEBUG = True 來開啟Django 的CSRF 偵錯模式。這可能會在回應正文中提供其他錯誤訊息或提示。 完成這些步驟後,重新提交 Ajax 請求以查看 CSRF 檢查是否成功通過。

以上是為什麼我的 Django CSRF 檢查會因 Ajax POST 請求而失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn