2013-04-09 6 views
22

IP 주소를 잠급니다.PHP 잠김 IP 주소

사용자보다이 주소가 같은 IP 주소로만 로그인 할 수 있습니까? 아니면 사용자가 로그 아웃하고 새 세션을 만들기 위해 다시 로그인해야합니까?

if (isset($_SESSION['last_ip']) === false) { 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
} 

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 

답변

13

이 코드는 사용자의 IP 주소가 변경되면 세션을 삭제합니다 (로그 아웃).

그래서 사용자는 모든 IP 주소에서 로그인 할 수 있지만 변경되면 로그 아웃됩니다.

이것은 세션 하이재킹을 방지하기 위해 작동하지만, IP가 계속 변하기 때문에 동적 IP를 사용하는 경우에는 잘 작동하지 않습니다.

+0

, 사용자들은 그래, 그들은 것 –

+0

에 로그인하면 새로운 IP에서 새 세션을 얻을 수있을 것입니다. – Halcyon

+0

나는 session_regenerate_id를 추가했다. (true); 그렇다면이 2 개가 어떻게 함께 작동합니까? –

8

이 있습니다. 사용자의 IP가 변경되면 로그 아웃됩니다. 공격자는 IP를 모방해도 여전히 IP를 모방 할 수 있지만 완전히 안전하지는 않습니다. 나는 또한 매우 권 해드립니다

: 세션 하이재킹을 방지하는 방법에 대한 자세한 내용은이 페이지를 살펴 보자 크리스 쉬 플렛. 세션 하이재킹에 대한 그의 기사는 여기에서 찾을 수 있습니다 : 코드 위

http://shiflett.org/articles/session-hijacking

1
if (isset($_SESSION['last_ip']) === false) { 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
} 

세션 "last_ip는"아직 생성되지 않은 경우,이 생성 및 사용자의 현재 IP의 값을 저장된다는 것을 의미합니다. 코드 위

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 

는 "last_ip"의 세션 값이 현재의 IP와 동일하지 않은 경우, 모든 세션 변수 (session_unset)를 확보하고 세션 (로 세션)에 등록 된 모든 데이터를 파괴하는 것을 나타냅니다.

실제 시나리오를 설명해 보겠습니다.

귀하의 웹 사이트에 먼저 액세스하므로 코드의 블럭이 현재의 현재 IP를 저장합니다. 이제 내 인터넷 연결이 끊어졌습니다. 그리고 dhcp가 활성화 된 내 isp에 다시 연결하고 에 새 IP를 제공합니다. 따라서 웹 사이트를 다시 방문하면 두 번째 코드 블록이 다른 IP를 가지고 있는지 확인하여 나를 로그 아웃합니다.

"last_ip"세션이 아직 생성되지 않은 경우 PHP의 알림을 표시하지 않도록 두 번째 코드 블록도 편집하십시오. 세션이 삭제 한 경우

if (isset($_SESSION['last_ip']) && $_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
}