12

現在、ユーザーがログインしているかどうかに関係なく、自分のページにフォームがあります。ユーザーがログインすると、これらのフォーム (CSRF を使用) のいずれかが表示されます。

問題は、認証後にこのボックスが表示されると、CSRF トークンが無効になることです。認証チェックと$form->isValid()返品なしでフォームを送信できるようにすることでこれを確認しましたがtrue、ログイン後にfalse次のエラーが表示されます。

CSRF トークンが無効です。フォームの再送信をお試しください。

認証時に Symfony が CSRF トークンを再生成/無効化するのを止める、これらのフォームから CSRF トークンを削除する、または認証後にフォームを生成する (ただし、これは避けたい) の 3 つの解決策があると思います。私の現在の解決策は、認証を使用して新しい CSRF トークンを返し、フォーム トークンinput値を設定することです。

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

4

2 に答える 2

0

この CWEを教えてくれた @MarkFox に感謝します。これが設計によるものであることはわかっていましたが、最終的にたどり着いたルートを回避する方法があることを願っていました。

興味のある方のために、CWE は次のように述べています。

既存のセッション ID を無効にせずに、ユーザーを認証するか、新しいユーザー セッションを確立すると、攻撃者は認証されたセッションを盗む機会を与えられます。

このため、 AJAX 経由で新しいリクエスト トークンを送信し、関連するフォームに配置するという、私がたどった道をたどることをお勧めします。

于 2013-10-25T09:28:08.137 に答える
0

通常のアプローチでは、誰かがログインに成功すると、ページ全体が更新され、ユーザーに合わせてカスタマイズされた別のデータが表示される可能性があります。

ただし、本当にやりたくない場合は、次のように言いました。

私の現在の解決策は、認証とともに新しいCSRFトークンを返し、フォームトークンの入力値を設定することです。

それをするだけです。それは何も悪いことではありません。

于 2013-09-17T12:54:55.327 に答える