9

URL from (Django アプリケーション)からPOSTAJAX 経由でリクエストを作成しようとしています。の URL にリクエストを送信して CSRF トークンを取得していますが、プリフライト リクエストで にリクエストが送信されると、トークンが変更されます。abc.comxyz.comGETxyz.comOPTIONSxyz.com

OPTIONSプリフライトされたリクエストでリクエストのレスポンスを取得する方法はありますか?

ノート:

私は次の情報源からの指示に従っています:

4

2 に答える 2

5

Django CSRF 保護では OPTIONS リクエストが許可されるため、最初の段階では問題ありません。

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works

私の理解が正しければ、次のリクエスト (クロスドメイン POST など) の通過を許可する必要があります。これが機能し、Django の CSRF 保護を通過するには、リクエストで CSRF トークン (POST データまたは AJAX のヘッダー) と一致する CSRF Coo​​kie を送信する必要があります。

現在、クロスドメインの制限により、abc.com が xyz.com の Cookie を設定したり読み取ったりすることは、javascript からでもサーバー側の応答からでも不可能です。したがって、このアプローチは不可能です。

代わりに、ビューに適用する必要が@csrf_exemptあります。これにより、どのサイトからも投稿できるようになります。したがって、ビューに他の保護を組み込む必要があります。もちろん、保護の安全性をチェックするのはあなた自身です。「Referer」および「Origin」ヘッダーは、curl などの基本的なもので簡単に偽造できることに注意してください。

于 2014-08-08T11:35:15.960 に答える
2

を参照django-cors-headersしてください。問題の解決に適した方法がわかる場合があります。

https://github.com/ottoyiu/django-cors-headers/

Django-rest-framework は http://www.django-rest-framework.org/topics/ajax-csrf-cors を推奨しています

于 2014-02-25T01:23:36.450 に答える