2013-09-30 3 views
1

요청의 내부 인증을 사용하는 백엔드 앱을 작성 중이므로 실제 사용자에게 노출되는 양식 수가 적은 것을 제외하면 CSRF는 필요하지 않습니다.symfony 2 csrf selective enable?

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> 

그래야 작동합니다. 뭐가 문제 야?

+0

당신이 나뭇 가지 파일을 게시 할 수 있을까요? 일반적으로 CSRF가 빠져 있습니다. 폼 템플릿에서 기본 폼 동작'{{form_widget (form)}}을 사용하지 않기로 결정한 경우 위의 추가 된 토큰 –

+0

을 얻기 위해'{{form_rest (form)}} '을 넣어야하기 때문입니다. 나는 기본값을 사용한다. – Tom

+0

Symfony의 어떤 버전을 사용합니까? – nni6

답변

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

+0

감사합니다. 문제가 무엇인지 이해하는 데 도움이됩니다. 이제 어떻게 해결할 수 있습니까? 특정 양식에 대한 확장을 활성화 할 수 있습니까? 아니면 전체적으로 활성화 한 다음 다른 모든 양식에 대해 CSRF를 비활성화해야합니까? (CSRF를 원하지 않는 양식이 더 많습니다.) – Tom

+0

가능한 해결책으로 답변을 업데이트했습니다. – nni6

+0

감사합니다. 나는 여전히 더 많은 것을 요구할 필요가있다 - 나는 그것을 하나의 묶음 안에 가능하게하고 싶지 않다. 어쩌면 3 번 또는 4 번 폼과 다른 번들의 폼에 대해서도 CSRF가 필요합니다. 클라이언트가 양식을 작성하는 방법을 알고 기본적으로 양식을 요청하지 않고 제출하는 클라이언트 - 서버 통신에서 양식을 잘못 사용했을 수 있습니다. – Tom