크로스사이트스크립트 취약점 등을 이용하여 세션을 탈취당한 경우에는 내 계정을 해커가 공유할 수 있게 됩니다.
그래서 다양한 세션보호 방법들이 강구되는 데 그중에서 가장 이해하기 쉽고 간단하게 해결할 수 있는 방안이 세션에 로그인한 IP주소를 기록해두는 것입니다.
위키피디아에서는 다음과 같이 간단한 PHP 코드를 제시하고 있습니다.
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['PREV_REMOTEADDR']) {
session_destroy(); // Destroy all data in session
}
session_regenerate_id(); // Generate a new session identifier
$_SESSION['PREV_REMOTEADDR'] = $_SERVER['REMOTE_ADDR'];
출처: https://en.wikipedia.org/wiki/Session_fixation
대충 절차를 보면
1. 로그인 시에 세션에 현재 사용자의 IP 주소를 PREV_REMOTEADDR로 저장한다.
2. 사용자 정보가 필요한 경우 세션의 IP 주소와 접속한 사람의 IP주소가 다르면 세션을 삭제한다.
라는 식이네요.
문제점도 있습니다.
사설IP를 쓰는 공간(회사 내부의 사설 네트워크, 무선공유기를 사용하는 커피숍) 등에서는 무용지물일 수 있습니다.
또, 손전화와 같이, 이동하면서 사용할 경우에도 IP가 바뀌기 때문에 계속 로그인을 반복해야 할 것 같습니다.
AOL과 같이 proxy gateway를 사용하는 경우에는 웹 연결시마다 IP 주소가 바뀔 수도 있다고 합니다. |