2012-02-09 7 views
7

でCSRFトークン無効。セッションは、この理由でアプリケーションが使用するmysqlデータベースに格納されます。私はライブ環境で2以上の負荷分散サーバーで実行さSymfony2のプロジェクトを継承している負荷分散Symfony2のアプリケーション

私が午前問題は、CSRF保護を持っているフォームに時々トークンが有効戻っていない来ているということです。私は、これは、トークンを生成したサーバーが常にフォームPOSTを取得し、送信されるトークンと一致しないサーバーではないことを推測しています。

私はsymfonyには非常に、非常に新しいですし、symfonyフレームワークからセッションとSessionCsrfProviderを使用してトークンを生成するために、いくつかの異なる解決策を試してみました。

誰もが正しい方向に私を指すか、同様の問題がありましたか?

+0

セッションは期待どおりに機能しますか? –

+0

はい、ユーザーのセッション管理は正常に動作します。これは、フォームが元のものではないサーバーにポストバックされた場合に設定されるcsrfトークンの警告です。私はIPアドレスを使ってロードバランスされたサーバーの1つで作業するだけでこれをテストしました。 – chrishey

+0

私が苦労しているのは、SessionCsrfProviderがデータベースに格納されたセッションを使用しているかどうかを理解することです。デバッグに関するヒント私たちが持っている唯一の負荷分散された環境は生きているので、テストするのは難しいです。 Thanks – chrishey

答えて

2

CsrfProvidersは、秘密鍵(parameters.ini)+意図(デフォルトはnull)+ のセッションIDを連結してトークンを生成します。

デフォルトでは、symfonyは、セッションのIDを使用するSessionCsrfProviderを使用するように設定されています。あなたがPDOSessionStorageやNativeSessionStorageオブジェクトを使用している場合

、それはsession_id()を返します。

それはあなたのsession_id()がリクエストを処理するもののマシンに応じて、同じではありません意味するかもしれません。

+3

これは、両方のサーバーでparameters.iniの秘密鍵が同じではなく、修正しても、アプリケーションキャッシュをクリアして両方のサーバーのApacheを数回再起動するまで有効ではないことが修正されたようです。あなたのすべての協力に感謝します。 – chrishey

関連する問題