최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

   session 변조방지를 위해 비교할 값은 무조건 IP로


최초 로그인에 성공하고 그 다음부터는 세션값을 가지고 이동한다.


그런데 단순히 세션에 값이 들어있다고만 해서(true) 판단하는게 아니라 사용자가 로그인을 했을 때의 실제 IP 정보를 가지고 


비교해야 변조공격에 대한 방어율이 올라간다.


따라서 세션을 저장하고 비교하는 값에는 실제 IP값을 추천한다.


   Process


[로그인 페이지]


~~ 로그인 SQL문 : 로그인 성공 ~~


$_SESSION["USER_IP"] = $_SERVER['REMOTE_ADDR'];  //내장함수를 사용하거나


$_SESSION["USER_IP"] = lib_getRealIP(); //본인이 만든 함수를 활용한다.


[이후 다른 페이지]


$_SESSION["USER_IP"] != $_SERVER['REMOTE_ADDR']; //이런식으로 비교하거나


lib_invalidAccess('eng', 'index.html'); //본인이 만든 함수를 활용한다.



[라이브러리]


function lib_invalidAccess($rang='kor', $failMovePage='index.html')

{

if ( $_SESSION["USER_IP"] != lib_getRealIP() ) //로그인세션은 현재IP로 비교. (세션내용의 변조방지)

{

if( $rang == 'kor' ) $message = '잘못된 접근입니다. 로그인 해 주세요.';

else $message = 'Invalid access to the site.';


echo ("

<script>\n

alert('{$message}')\n

window.location.href = '{$failMovePage}';\n

</script>\n

");

exit();

}

}


function lib_getRealIP()

{

if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet

{

 $ip=$_SERVER['HTTP_CLIENT_IP'];

}

elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy

{

 $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];

}

else

{

 $ip=$_SERVER['REMOTE_ADDR'];

}

return $ip;

}

댓글