5

サイトと CSRF に少しクレイジーで腹立たしいバグがあります。

Apache2 + mod_wsgi を使用して Ubuntu で Django 1.2.3、Python 2.6 を実行しており、エンド ユーザーから 403 CRSF 検証の失敗と結果として 403 が報告されています。

私たちのすべてのフォームにはcsrf_tokenand があります - 私が知る限り、ローカル開発とステージ (私たちはまだ本番環境ではありません) で問題なく動作します... 1 つのオフィス (クライアントのナッチ) を除いて。ランダムな機会に、彼らはそのような 403 を取得しますが、その後更新すると消えます (したがって、トークンが欠けている HTML などではありません)。

私は原因と解決策を熟考しています.そのオフィスには、非常に熱心すぎるか、セットアップが不十分なプロキシキャッシュ、または同様のものがある可能性があります.Django / Apacheの方法で、オーバーザトッププロキシ(クライアントのオフィスはセットアップを変更しない可能性が高い)に対処するか、これらのCSRFが失敗する原因となる可能性があるもの.

ところで: これはゼロからの 1.2.3 プロジェクトであり、ある種の 1.1 アップグレードではありません。単一の標準/正しい 1.2.3 CSRFMiddleware と手動で追加された csrf_tokens のみを使用します。csrf_token を自動的に含める CSRFResponseMiddleware ではありません。

また、これは、別々の場所でホストされている 2 つの別々のサーバー (開発サーバーとステージング サーバー) で発生しました。共通の要因は、(理論上) 同じ Django/Apache/mod_wsgi セットアップ、同じコードベース、同じオフィスが 403 を取得している (そして、私たち自身の場所で 403 を複製できない) ことです。

4

1 に答える 1

2

誰かに役立つ場合に備えての更新です。

テストのために CRSF 保護を削除しました ( http://johnmc.co/llum/disable-csrf-protection-for-django-1-2/を使用)。これにより 403 はクリアされましたが、その後、同じクライアント/ローカル ネットワークからの長さゼロの POST データに対して断続的に 500 が発生しました。逆に)。

したがって、具体的には CSRF の問題ではなく、POST-payload-getting-zapped-somewhere の問題でした。(ほとんどの場合、1 か所だけでプロキシが正しく構成されていないことが原因です)

HTH

スティーブ

于 2010-11-09T11:28:34.107 に答える