2014-09-20 7 views
0

Chris Shifflet이 "Essential PHP Security"라는 책을 읽었습니다. 저자가 CSRF를 막기 위해 토큰을 사용하도록 권장하는 CSRF에 대한 장이 있습니다. 책에있는 코드는 사용하는 양식에 토큰을 추가한다고 말하면서 간단한 조건문을 사용하여 토큰을 확인할 수 있습니다.CSRF 코드가 작동하지 않습니다.

<?php 

if (isset($_SESSION['token']) && $_POST['token']== $_SESSION['token']) 
    { 
     echo $_POST['token']; 
     echo "form passed"; 
    } 

위의 코드는 작동하지 않는 것 같습니다. "양식 전달됨"메시지가 표시되지 않습니다. 위의 코드에 어떤 문제가 있습니까? 첫 번째 코드 집합은 토큰을 생성하지만 성공 메시지는 없습니다.

답변

0

buy.php에 코드 상단에 session_start();을 추가해야합니다. 예 ...

session_start(); 
if (isset($_SESSION['token']) && $_POST['token']== $_SESSION['token']) 
{ 
    echo $_POST['token']; 
    echo "form passed"; 
} 
+0

감사합니다. 그것은 효과가 있었다. 왜 그들이 너무 많은 실수로 책을 출판 할까 궁금해. 다시 감사합니다. –

+0

@ManishB 당신을 환영합니다! – MH2K9

0
난 당신이 기능을 효율적으로 그것을 할 제안합니다

: 당신은 당신의 프로젝트에 어디 일반적인 그 기능을 넣어 포함하거나 파일을 필요로 할 수 있습니다

session_start(); 
function generate_token(){ 
    $token = uniqid(rand(), true); 
    $_SESSION['token'] = $token; 
    $_SESSION['token_time'] = time(); 
} 


//avoid putting script at bottom until required 
if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST)){ 
if(isset($_SESSION['token']) && isset($_SESSION['token_time']) && 
isset($_POST['token'])) 
    { 

if($_SESSION['token'] == $_POST['token']) 
{ 

    $timestamp_ancien = time() - (15*60); 
    //Si le jeton n'est pas expiré 
    if($_SESSION['token_time'] >= $timestamp_ancien) 
    { 
     //here Instruction 
     generate_token();//for next call 


    }else{echo"error3";} 
    }else{echo"error2";} 
    }else{echo"error1";} 
} 
generate_token(); 

이유 모든 곳에서 쓰지 않고이 코드를 사용하십시오.

관련 문제