2012-09-11 4 views
0

동일한 모듈에서 a 작업에서 b 작업으로 리디렉션하고 싶습니다. 액션 b을 실행하려면 csrf 토큰이 필요하며, 몇 가지 매개 변수도 전달해야합니다.php symfony 1.4 : csrf 토큰으로 리디렉션하는 방법

액션 :

public function executeA(sfWebRequest $request){ 

    //... do stuff 

    $this->redirect('module/b?id='.$something->getId()); 

} 

액션 B :

public function executeB(sfWebRequest $request){ 

    $request->checkCSRFProtection(); //morte 

    $something_id = $request->getParameter('id'); 
    //... do stuff 

} 

동작이 b 실행 함 link_to('module/b?id='.$something.getId() , array('method' => 'post')) 또는 다른 방법에 의해 생성 된 앵커를 클릭 한 경우에만, 그 요청에 CSRF 토큰을 전송하기 때문에 .

은 내가 $this->forward()$this->redirect() 방법을 시도하고, link_to()처럼 PARAMS을 리디렉션 'method' => 'post'을 추가했지만, 아무것도 작동하고, 나도 웹에 그것에 대해 아무것도 찾을 수 없습니다. API 문서는 그것에 대해 지적했다. 내가받는 것은

500 | Internal Server Error | sfValidatorErrorSchema 
_csrf_token [Required.] 

오류입니다. //morte으로 표시된 줄에서 실패합니다. 제발, 아는 사람, 어떻게 제대로, 그리고 내가 다른 모듈로 리디렉션하려는 경우에도 어떻게해야합니까?

+0

'_csrf_token' 단지 형태로 사용된다. 양식을 전달하고 있습니까? – j0k

+0

'_csrf_token'은 일부 메소드와 함께 앵커에서도 사용됩니다. 'anchor'의'html'을 검사합니다. 나는'$ request-> checkCSRFProtection()'을 사용합니다. 귀하의 질문에 대답하기 위해 양식을 전달하지 않습니다. 그냥 양식 처리를 완료했을 때 csrf 보호 조치가 실행되기를 원합니다. – Kuro

+0

이것은 여전히 ​​나에게 불분명합니다. . – j0k

답변

2

좋습니다. 이제 더 명확합니다.

사실은 이 다른 작업으로 리디렉션되지 않기 때문에 쿼리에 다시 추가하지 않았습니다.

시도 :

public function executeA(sfWebRequest $request){ 

    //... do stuff 

    $this->redirect('module/b?id='.$something->getId().'?_csrf_token='.$request->getParameter('_csrf_token')); 

} 
+0

토큰을 생성 할 수 있습니다 컨트롤러, 예 : 'executeB' 클래스? – Kuro

+0

음, 그렇습니다. 가짜 sfForm을 생성하고 [getCSRFToken()'] (http://trac.symfony-project.org/browser/branches/1.4/lib/form/sfForm.class.php#L884)를 호출해야합니다. 하지만 'execute1'에 nocsrf = 1과 같은 맞춤 매개 변수를 생성 한 다음'nosrf '가 여기에 있으면'executeB'에서'checkCSRFProtection'을 호출하지 않는 것이 어떻습니까? – j0k

+0

그 목적을 이길 수 없을까요? 그 매개 변수 작업에 대해 알고있는 사람은 CSRF 보호 확인을 무시할 수 있습니다. 가짜 형식으로 시도했지만 작동하지 않습니다. '[CSRF 공격이 탐지되었습니다.]''$ this-> checkCSRFProtection()'메소드가 심포니에서 어떻게 작동하는지 정확히 모르겠지만, 오류보고에 따르면 어떤 sfForm에서는'bind()'함수를 사용합니다. 그것을 검사하는 컨트롤러 부분에 어떤 형식도 만들지 않았습니다. – Kuro

관련 문제