2

Proxy の背後で Django システム (Alfred と呼びましょう) を実行する必要があります。どちらも同じネットワーク上にあります。プロキシとして、yuri vandermeer の django-httpproxy を使用します。(彼のページ yvandermeer.net を参照)

Django バージョン 1.2.4 を実行している両方のシステム

両方のシステムが同じ (クローズド) ネットワーク内にあり、同じ IP 上にあります。ポート 8000 でプロキシを実行し、ポート 1337 で Alfred を実行しています。デフォルトで Django に付属している (そして有効にした) 彼の /admin サイトを使用して Alfred にログオンする必要があります。これはポート 1337 経由で動作していますが、ポート 8000 経由でアクセスする必要があります。

私が試してみると、Alfred は 403 CSRF エラーをスローし、私は実際には中間者のようなものだと言っています (-そして、Alfred がそう言っているときは完全に正しいです)。

Alfreds CSRF 保護を無効にするために、いくつかのことを試しました。

  1. MIDDLEWARE_CLASSES の settings.py の CsrfViewMiddleware をコメントアウトしました
  2. このサイト (questions/1785772) に記載されているように、disable.py を作成し、その disableCSRF クラスを MIDDLEWARE CLASSES に追加しました (実際には各 [!] ポジションを試しました)。

    #disable.py
    class DisableCSRF(object):
        def process_request(self, request):
            setattr(request, '_dont_enforce_csrf_checks', True)
  3. 私はdisable.pyを作成し、そのdisableCSRFクラスをMIDDLEWARE CLASSESに追加しました(再び各ポジションを試しました)

    #disable.py
    class DisableCSRF(object):
        def process_view(self, request, callback, callback_args, callback_kwargs):
            setattr(request, '_dont_enforce_csrf_checks', True)
  4. django/middleware/csrf.py の Csfr 保護メカニズムをコメントアウトしようとしましたが、このサイトで言及されているように、160 行目ではなく 190 行目で関連する部分が見つかりました: question/1650941/

言及されたものはどれも機能しませんでした。/admin 経由でログオンしようとすると、常に 403 エラーが発生します。

Alfred で CSRF 保護を無効にするにはどうすればよいですか? /admin に対して無効にすることは可能ですか? 4のようにソースで何かをコメントアウトするのではなく、2.と3.で述べたようなミドルウェアでこれを行うことができればいいのですが。ミドルウェアの方法があれば素晴らしいでしょう。

前もって感謝します!:)

4

2 に答える 2

3

ビュー関数で @csrf_exempt デコレーターを使用して、そのビューの csrf を無効にすることができます。 ドキュメント
を見る

于 2011-01-25T11:34:27.820 に答える
0

過ちはすべて私の側にありました。サーバーログを確認すると、Alfred がエラーをスローしているのではなく、プロキシ (django-httpproxy) がスローしていることに気付きました。おそらく、両方のサーバーが localhost で実行されており、リクエストも localhost から送信しているためです。Proxy と Alfred の両方で CSRF を無効にしました。このセットアップでは、403 エラーが発生しなくなりました。

残念ながら、django-httpproxy は Cookie を失うため、ログインできません。

教訓: django-httpproxy をリバース プロキシとして使用しないでください。

于 2011-01-25T15:04:03.340 に答える