2013-08-09 23 views
12

私のページには現在、ユーザーがログインしているかどうかにかかわらずフォームがあります。ユーザーがログインすると、これらのフォーム(CSRFを使用する)のいずれかが提示されます。認証時にCSRFの再生/無効化を停止する

認証後にこのボックスが表示されると、CSRFトークンが無効になるという問題があります。

CSRFトークンが無効である:私は、ログインした後、それはのエラーで私にfalseを与えるのに対し、自身が認証チェックと$form->isValid()戻りtrueせずにフォームを送信できるようにすることで、これを確認しています。フォームを再送信してください。

私は3つの解決策があると思います - (私はむしろしかし、これを避けるためと思います)、認証にCSRFトークンを無効/再生からsymfonyのを止めるこれらのフォームからCSRFトークンを削除するか、認証後に私のフォームを生成します。私の現在の解決策は、新しいCSRFトークンを認証およびフォームトークンinputの値とともに戻すことです。

追加:現在割り当てられているすべてのCSRFトークンの表示方法を知っている人はいますか?セッションはそれらを保持していないようです。

+0

ログイン後にページがリロードされませんか? – lsouza

+0

@ヒサムいいえ、ログインはajaxを使って行われるので、ユーザーはログインしてログインが成功したらフォームを開きます。これは、トークンが無効になる(一見)点です。私はすべてのトークンを表示する場所を知っていれば、これをさらにデバッグすることができます。 – Prisoner

+0

おそらく他のトークンを再生成できますか?参照してください:http://stackoverflow.com/a/11632713/209585 – lsouza

答えて

0

私はthis CWEを指し示すために@MarkFoxに感謝します - 私はそれがデザインを通してあることを知っていましたが、私が終わったルートを避ける方法があることを望んでいました。

は、ユーザーの認証、あるいは既存のセッション識別子を無効にすることなく、新しいユーザーセッションを確立し、攻撃者に認証されたセッションを盗むために機会を与える:

は興味がある人のために、CWEは述べています。

このような理由から、新しいrequest tokens via AJAXを送信し、関連するフォームに配置することをおすすめします。

0

一般的に、誰かが正常にログインすると、潜在的に異なるデータが表示され、ユーザーにカスタマイズされるため、ページ全体が最新表示されます。

しかし、あなたが本当にそれを行うにはしたくない場合は、あなたが言った:

私の現在のソリューションは、トークンバック認証で新しいCSRFを渡し、設定フォームは、入力値をトークンにあります。

これだけです。それには何も問題はありません。

関連する問題