2017-03-07 3 views
0

토큰을 생성하는 방법과 사용 방법을 설명한 this과 같은 링크/대답을 이미 발견했습니다.PHP - Smarty - Http 요격 요격

내 웹 사이트에서 Smarty를 사용하고 있으며 양식이 이미 많이 있습니다. 모든 요청의 헤더 안에 토큰을 보내고 헤더를 확인하기위한 모든 요청을 잡는 방법을 찾으려고합니다.

: AngularJS와, 난 $httpProvider.interceptorsheaders['Authorization'] = 'Bearer ' + token;

나는이

class Interceptor { 
    $token; 

    function __construct(type) { 
     switch (type) { 
      case 'beforeSending': 
       $token = md5(uniqid(rand(), TRUE)); 
       $_SESSION['token'] = $token; 
       $_SERVER['HTTP_authorization'] = 'Bearer ' + $token; 
       break; 
      case 'beforeExecuting': 
       if(hash_equals($_SESSION['token'], $_POST['token'])){ 
        //continue 
       }else{ 
        //error redirect to homePage or logout 
       } 
       break; 
     } 
    } 
} 
이 모든의 헤더에 세션에 저장된 토큰을 추가해야

같은 것을 만들고 싶습니다 사용할 수 있습니다 의뢰.

이렇게하면 모든 요청에 ​​올바른 토큰이 포함되어 있는지 확인해야합니다.

모든 양식에 입력을 추가하고 모든 통화를 확인하는 대신 전역 적으로이를 수행 할 수있는 방법이 있습니까?

+0

세션 변수를 지정하고 인증해야하는 페이지에서 해당 세션 변수를 확인하십시오. – junkfoodjunkie

+0

사용자가 로그인하고 토큰이 세션 변수로 저장 될 때 토큰을 생성합니다. 이제 모든 POST에 대해이 토큰을 전체적으로 확인하는 방법이 있습니까? 모든 페이지에 코드를 추가하는 대신? – Weedoze

+0

아니요. 각 처리 파일에 세션 확인을 추가해야합니다. – junkfoodjunkie

답변

0

글쎄, 여러 가지 방법이 있지만, 토큰이 적절하게 검사되도록하려면 더 나은 해결책은 로그인시 (세션을 통해) 생성 한 다음 저장하거나 양식을 통해 밀어 넣는 것입니다. 토큰 자체가 중요하지 않다면 처리 스크립트가 진행될 수 있도록하기 전에 토큰이 있는지 확인하십시오.

이렇게하려면 여러 가지 방법이 있지만 로그인시 세션 토큰을 만들고 서버에 저장되어있는 경우 처리 스크립트에서 수행해야 할 작업은 다음과 같습니다.

<?php 
//check to see if session is started 
if (!session_id()) { session_start(); }; 

if (isset($_SESSION['token'])) { 
    //process the rest of the form 
} 
?> 
+0

토큰이 존재할 때만 점검하면 CSRF를 보호 할 수 없습니다. – Weedoze

+0

게시물을 통해 토큰을 푸시하지 않습니다. 그것은 위조하기 쉽습니다. 그러나 숨겨진 입력을 추가하고 그 값을 확인하고 로그인 된 사용자 등의 검사와 결합 할 수 있습니다. – junkfoodjunkie

+0

자세한 내용은 여기를 참조하십시오 : https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet – junkfoodjunkie