32

フロントエンドのWebアクセス可能なコンポーネントとデスクトップクライアントからアクセスできるAPIの両方を備えたDjangoWebアプリがあります。ただし、新しいCSRFミドルウェアコンポーネントを使用すると、POSTされたデスクトップクライアントからのAPIリクエストは403を取得します。

なぜこれが起こっているのか理解していますが、セキュリティを損なうことなくこれを修正する適切な方法は何ですか?どういうわけか、それがAPIリクエストであり、DjangoがCSRFをチェックするべきではないこと、またはそれが悪い戦略であることをHTTPヘッダーで通知できますか?

編集 -

私が現在使用している方法は、デスクトップクライアントがヘッダーX-Requested-With:XMLHttpRequestを設定することです。これはちょっとハッキーですが、これがどのようにうまく処理されるかはわかりません。

4

3 に答える 3

10

デスクトップクライアントのビューを分割して、csrf_exemptで装飾するのはどうですか?

于 2010-03-09T00:20:14.213 に答える
8

クラスベースビューを使用している場合は、次のようなpostメソッドではなくdispatchメソッドをcsrf_exemptする必要があります。

@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
    return super(MyView, self).dispatch(request, *args, **kwargs)

このバグチケットを参照してください: https ://code.djangoproject.com/ticket/15794

于 2013-01-17T12:25:28.793 に答える
-3

Django 1.1以降、ブラウザは適切なセキュリティチェックを行っているように見えるため、CSRFコードはAJAXリクエストの通過を自動的に許可します。これが元のコミットドキュメントです。

于 2010-09-06T15:06:16.630 に答える