2012-01-25 3 views
-2

웹 응용 프로그램의 보안 문제를 해결하기 위해 노력하고 있습니다. 그리고 나는 CSRF를 다뤄야 만합니다. 많은 refrences를 거쳤지만 일부는 쿠키을 사용하고 다른 용도는 세션입니다.CSRF 방지를 위해 세션 또는 쿠키를 저장할 토큰이 더 좋습니다.

+3

세션에서도 쿠키를 사용합니다. 그리고 그 질문을 조금 더 확장하려고 노력해야합니다. 당신이 가진 좀 더 많은 배경과 실제 관심사/질문을 말해야합니다. – deceze

답변

1

CSRF 방지를 위해 클라이언트 모두에 공유 토큰을 저장해야하므로 클라이언트가 요청할 때 제출 된 값을 알려진 값과 비교할 수 있습니다.

클라이언트 측 당신이 쿠키, 또는 숨겨진 양식 필드를 사용할 수 있습니다 (개인적으로는 숨겨진 필드를 선호 - 그래서 클라이언트 브라우저에서 모든 형태의 쿠키를 쌓아하지 않음). 당신이 (세션 ID 어쨌든 쿠키에 저장 됨) 세션를 사용하거나 당신은 아마 기록을 확인하는 세션을 사용할 필요가 거라고하지만 (데이터베이스에 저장할 수서버에서

그 클라이언트에 속함).

다음은 CSRF 예방 코드의 예입니다.

session_start(); 

if (isset($_POST) && isset($_POST['csrf'])) { 
    var_dump($_POST, $_SESSION); 
    if ($_POST['csrf'] == $_SESSION['CSRF_FORM1']) { 
     print 'You win cookies!'; 
    } 
    else { 
     print 'You win a bucket of vomit!'; 
    } 
} 

$_SESSION['CSRF_FORM1'] = md5(microtime()); 

?> 
<form action="" method="post"> 
    <input type="hidden" name="csrf" value="<?php print $_SESSION['CSRF_FORM1']; ?>" /> 
    <input type="submit" value="Good form Jack!" /> 
</form> 

<form action="" method="post"> 
    <input type="hidden" name="csrf" value="badValue" /> 
    <input type="submit" value="Bad form Jack!" /> 
</form> 
관련 문제