CSRF 공격은 어떤 게시판의 페이지를 열었을 때 의도치 않는 어떤 처리를 실행시켜 버리는 방법입니다.

 아래 코드는 언뜻 보면 정상적인 코드로 보일 수 있습니다. 예를 들어 아래 태그가 포함된 페이지가 있고, 관리자만 게시물을 삭제할 수 있게 하여 일반 사용자는 게시물을 삭제할 수 없도록 해두었습니다.

하지만 관리자 세션을 취득한 관리자가 아래 페이지에 접속하는 것만으로도 의도치 않게 손쉽게 페이지를 삭제해 버릴 것입니다. 일반 사용자가 관리자 세션을 취득하지 않아도 말입니다.

<?php 
 if(!empty($_SESSION['admin_session'])) 
 { 
    mysql_query("DELETE FROM `tbname` WHERE id='101';"); 
 } 
 ?> 
 <img src="http://example.com/del.php?id=101"> ?>

그래서 요즘은 회원정보 변경 전 처리 페이지 직전에 비밀번호를 요구하거나 토큰을 요청하여 올바른 경우에만 변경하도록 하고 있습니다.

 아래와 같이 비밀번호가 일치할 때만 삭제하게 해두면 CSRF 공격에 대응할 수 있습니다.

<?php 
 if(($_POST['admin_password'] === '123456789') && ($_POST['id'] === '101')) 

 { 
    if(!empty($_SESSION['admin_session'])) 
    { 
        mysql_query("DELETE FROM `tbname` WHERE id='101';"); 
    } 
 } 
 ?> 
 <img src="http://example.com/del.php?id=101"> ?>

0 댓글