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

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

DDD
發布: 2024-12-04 13:41:14
原創
266 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板