1

Symfony2.1を使用してログインフォームのCSRF保護がうまく機能していないようです。

config.ymlでは、csrf_protectionがtrueに設定されています。ログインフォームは、'form[_token]']という名前の非表示の入力をレンダリングしています。security.yml内:

csrf_parameter: form[_token]
intention: authenticate

この設定で、問題なくログインできます。しかし、CSRFトークンはチェックされていません。フォームを送信する前に、非表示の入力フィールドを削除してこれを確認しました。

<input type="hidden" id="form__token" name="form[_token]" value="9b2f5d5efabb938ff8d83c2c8318db1377a3ef16">

csrf_provider構成設定をsecurity.ymlに追加すると、ログインできなくなり、「InvalidCSRFtoken」というエラーが発生します。

csrf_provider: form.csrf_provider

私はこのトピックで見つけたものをすべて読みましたが、何も正しく機能していないようです-この記事で読んだものを除いて:http://henrik.bjrnskov.dk/symfony2-cross-site-request-forgery/。そのようなものはFriendsofSymfonyに引き込まれたようです:https ://github.com/FriendsOfSymfony/FOSUserBundle/pull/469 、私は使用していません。

投稿では、次のように指示されています。

  • loginActionで手動でトークンを生成します。

    $ csrfToken = $ this-> container-> get('form.csrf_provider')-> generateCsrfToken('authentication');

  • ビューに送信します

  • フォームに手動でレンダリングします

これは迷惑です。

質問は基本的に次のようになります-構成設定のみを使用するログインフォームに対してCSRF保護がSymfony2.1で機能する必要がありますか、それとも機能させるためにloginActionとテンプレートを変更する必要がありますか?

4

2 に答える 2

0

同じ問題が発生しました。フォームを投稿すると、「無効なcsrfトークン」エラーが発生しました。

PHPSESSIDはリクエストごとに異なることがわかりました。これにより問題が発生しました。これは、csrfトークンがそのCookieコンテンツを使用して生成されるためです。

解決策:cookie_secureを設定します:false

config.ymlで、またはconfigから行を削除します(これはframework-> sessionの下にあります)

デフォルト(true)の設定では、Google Chromeで問題は発生しませんでしたが、mozzilaやその他のブラウザでこのエラーが発生しました。

于 2013-01-24T12:03:54.780 に答える