2012-11-28 8 views
1

Symfony 2.1을 사용하여 로그인 양식 CSRF 보호가 행복하게 작동하는 것처럼 보일 수 없습니다.로그인 양식을 얻는 방법 Symfony 2.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 할을 수 있습니다 "잘못된 CSRF 토큰"

csrf_provider: form.csrf_provider 

내가이 항목에서 찾을 수있는 내용을 읽었으며 아무 것도 올바르게 작동하지 않는 것 같습니다.이 기사에서 읽은 내용은 제외합니다. http://henrik.bjrnskov.dk/symfony2-cross-site-request-forgery/. 그 물건들은 Symfony의 Friends : https://github.com/FriendsOfSymfony/FOSUserBundle/pull/469으로 끌어 들여진 것 같습니다. 나는 사용하지 않았습니다. > generateCsrfToken -

$ csrfToken = $ this-> 컨테이너 -> GET ('form.csrf_provider') :

  • 가 loginAction에서 수동으로 토큰을 생성합니다

    포스트는 당신을 지시 ('입증');

  • 로 전송하고 성가신 형태

에서 수동으로 렌더링합니다.

질문은 기본적으로 구성 설정 만 사용하는 로그인 양식의 경우 CSRF 보호가 Symfony 2.1에서 작동해야합니까, 아니면 작동하도록 loginAction 및 템플릿을 수정해야합니까?

답변

0

동일한 문제가 있습니다. 양식을 게시했을 때 "잘못된 csrf 토큰"오류가 발생했습니다.

PHPSESSID는 모든 요청마다 다릅니다. csrf 토큰은 해당 쿠키 내용을 사용하여 생성되므로이 문제가 발생했습니다.

sollution : 당신의 config.yml에

허위 또는 그냥 설정에서 선 제거 (이것은 프레임 워크에서 찾을 수 있습니다 -> 세션) 기본 (true)를 설정

을 : cookie_secure 설정 Google 크롬에서 아무런 문제도 발생시키지 않았지만 mozzila 및 다른 브라우저는이 오류를 발생 시켰습니다.

1

generateCsrfToken() 메서드에 잘못된 매개 변수를 전달했습니다. '인증'이 아닌 '인증'해야합니다. 이것이 잘못된 토큰을 얻는 이유입니다.다음과 같이 작동하도록 :

secured_area: 
    pattern: ^/ 
    form_login: 
     csrf_provider: form.csrf_provider 
     csrf_parameter: _csrf_token 

가 다음 로그인 컨트롤러의 응답에 다음 값을 추가 :

'csrf_token' => $this->container->get('form.csrf_provider')->generateCsrfToken('authenticate') 

마지막 템플릿에서 :와

<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" /> 

을 테스트 Symfony 2.3.1

+0

이것은 로그인 컨트롤러에 아무 것도 추가하지 않고 2.5에서 작동합니다 (첫 번째 단계와 마지막 단계 만). – dsomnus

관련 문제