1

リクエストの内部認証を持つバックエンド アプリを作成しているので、実際にユーザーに公開される少数のフォームを除いて、CSRF は必要ありません。

そのため、config.yml で CSRF を無効にしましたが、特定のフォームに対して有効にしたいと考えています。ドキュメントによると、これでうまくいくはずです:

public function setDefaultOptions(OptionsResolverInterface $resolver) {
    $resolver->setDefaults(array(
        // FIXME: this doesn't work, I still don't get CSRF ?
        'csrf_protection' => true,
        'csrf_field_name' => '_token',
    ));
}

しかし、そうではありません。私はまだこの形式で CSRF トークンを取得していません。私の小枝ファイルには次のように書かれています:

<form action="{{ path('mypath') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <button name="submit">{{ 'register.submit'|trans }}</button>
</form>

それで、それもうまくいくはずです。どうしたの?

4

1 に答える 1

2

問題は、config.yml で CSRF を無効にしたときに、CSRFExtension をプロジェクトにロードしたくないと言ったことです。「グローバルな方法で」無効にしました。なので、それ以降は使えません。

ここでどのように行われるかをコードで確認できます: Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension::registerFormConfiguration($config, ContainerBuilder $container, XmlFileLoader $loader).

あなたの場合、この行は false を返します。

$this->isConfigEnabled($container, $config['csrf_protection']) // this returns false

そのため、CSRFExtension はロードされませんでした。

config.yml と拡張機能の関係がわからない場合は、ここでどのように機能するかをお読みください: http://symfony.com/doc/current/cookbook/bundles/extension.html

于 2013-09-30T11:00:55.107 に答える