2014-11-13 2 views
1

phalcon Framework에서 작업 중입니다. 사용 가능한 csrf 기능으로 작업하기로 결정했습니다. 문서화 된대로 필요한 모든 단계를 밟았습니다.ajax를 통해 작업 할 때 phalcon php csrf 토큰 유효성 검사가 실패합니다.

나는 데이터 토큰과 그 값을 받고 난

$data = $this->request->getJsonRawBody(); 
print_r($data); //// proper data 
if ($this->request->isPost()) { 
     if ($this->security->checkToken()) { 
      die('proper token'); 
     } 
     else{die('NOT A proper token');} 
    } 

를 실행하고 내 게시물 요청이 같다 :

내가 세션 데이터를 확인
$scope.submit = function() {  
       $scope.formData.token = [$("#token").attr("name"), $("#token").val()];   

       $http.post(
        'http://localhost/project/index/function', 
        JSON.stringify($scope.formData) 
       ).success(function(data) { alert(data); 
        if (data.isValidToken) { 
         alert("Ok, you win!!!"); 
        } else { 
         alert("Sorry, not valid CSRF !!!") 
        } 
       }); 
       return false; 
      }; 

, 토큰이 잠시 저장 폼을 생성하는 것은 ajax 요청이 완료 될 때 출력하는 것과 다릅니다. 누군가 내가 잘못한 것을 가르쳐 줄 수 있습니까?

답변

1

Phalcon\Security::checkToken은 기본값으로 $_POST입니다. ajax를 사용하려면 tokenKeytokenValuePhalcon\Security::checkToken으로 전달하십시오.

확인 here

$data = $this->request->getJsonRawBody(); 

if ($this->request->isPost()) { 
    $tokenKey = $this->session->get('$PHALCON/CSRF/KEY$'); 
    $tokenValue = $data->{$tokenKey}; 
    if ($this->security->checkToken($tokenKey, $tokenValue)) { 
     die('proper token'); 
    } 
    else{die('NOT A proper token');} 
}