ホームページ >バックエンド開発 >Python チュートリアル >Ajax POST リクエストで Django CSRF チェックが失敗するのはなぜですか?

Ajax POST リクエストで Django CSRF チェックが失敗するのはなぜですか?

DDD
DDDオリジナル
2024-12-04 13:41:14281ブラウズ

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

Ajax Post リクエストで Django CSRF チェックが失敗する

Django のドキュメントで説明されているように、CSRF 保護を有効にすると、悪意のあるクロスサイト リクエスト攻撃を防ぐことができます。指示に従って、Ajax ポスティングを使用して CSRF チェックを実装しようとしましたが、依然として拒否が発生しています。

この問題をトラブルシューティングするには、次の手順を検討してください:

  1. トークンの存在の確認:
    JavaScript コードが CSRF トークンをフェッチしていることを確認します。そしてそれを csrftoken という変数に保存します。このトークンはヘッダーを設定する前に存在する必要があります:

    $.post("/memorize/", data, function (result) { ... });
    
    var csrftoken = getCookie('csrftoken');
    xhr.setRequestHeader("X-CSRFToken", csrftoken);
  2. トークンの使用を確認する:
    トークンを取得した後、Ajax リクエストのヘッダーに明示的に設定します。 setRequestHeader.
  3. チェックレスポンスを使用本文:
    Django からの応答本文を調べて、CSRF トークンが欠落しているか無効であることが明示的に言及されているかどうかを確認します。
  4. 代替方法 (データ本文を使用):
    ヘッダーを設定する代わりに、Ajax リクエストのデータ本体に CSRF トークンを埋め込むことができます次のように:

    $.ajax({
        data: {
            csrfmiddlewaretoken: '{{ csrf_token }}',
            ...  // Other data
        },
    });
  5. デバッグを有効にする:
    設定に DEBUG = True を追加して、Django の CSRF デバッグ モードをオンにします。これにより、応答本文に追加のエラー メッセージやヒントが表示される場合があります。

これらの手順が完了したら、Ajax リクエストを再送信して、CSRF チェックが正常にパスしたかどうかを確認します。

以上がAjax POST リクエストで Django CSRF チェックが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。