2012-05-29 1 views
5

세션 하이재킹을 방지하는 방법을 찾으려고합니다. 다음은 내가 생각한 바입니다.PHP 세션 도용 방지를 위해 사용자 에이전트와 IP 확인

사용자 ID 세션과 함께 사용자 에이전트와 사용자 IP 세션도 추가하십시오. 페이지가로드 될 때마다 세션이 일치하는지 확인하기 위해 세션이 검사됩니다. 예 :

<?php 

$userIp = $_SESSION['userIp']; 
$userAgent = $_SESSION['userAgent']; 

if ($userIp != $_SERVER['REMOTE_ADDR'] || $userAgent != $_SERVER['HTTP_USER_AGENT'] { 
    session_destroy(); 
} 

?> 

감사합니다.

답변

11

훨씬 더 복잡합니다. 귀하의 사이트/서비스는 다른 설정을 가진 다양한 사람들이 액세스 할 수 있습니다. 잘못 될 수있는 첫 번째 일은 누군가가 프록시 서버를 통과하는 경우입니다. 앱에 표시되는 IP가 변경 될 수 있으며 유효한 사용자에 대해서도 세션이 중단됩니다.

IP로 무엇인가를 절대적으로 수행해야하는 경우 오작동을 너무 많이받지 않고 수행 할 수있는 대부분의 작업은 원래 국가/지역을 확인하는 것입니다. 캐나다에서 한 로그인과 인도에서 다른 로그인 중 하나를 감지하면 문제가있을 수 있습니다. 그때도 바보가 아닙니다.

사용자 에이전트도 가짜입니다 : 누군가의 PHPSESSIONID을 얻을 수 있으면 사용자 에이전트도 확실히 얻을 수 있습니다. 그래서별로 성취되지 않았습니다.

누군가의 세션을 보호하는 가장 좋은 방법은 HTTPS 뒤에 모든 것을 인증하고 세션 쿠키가 HTTPS 전용인지 확인하는 것입니다.

편집 : 당신이 세션 뒤에 보호하는 데이터가 매우 민감 지점으로 제공하고 사용자가 인식해야하는 경우, 당신은 항상 그들을 위해 로그인 한 다른 세션을 표시 할 수 있습니다 자신의 사용자. 같은 일은 예를 들어 GMail에 의해 수행됩니다.

+0

답변 해 주셔서 감사합니다. 나는 솔직히 말해서 첫 번째 요점에 대해 너무 귀찮게하지 않지만 두 번째 것은 유효합니다. 이 문제를 방지 할 수있는 방법을 찾을 수 없다면 HTTPS 만 사용할 것입니다. –

+1

감사! 그런데 어떤 옵션을 선택 하든지 항상 HTTPS를 추가하는 것이 좋습니다. 공용 WiFi 핫스팟의 확산은 HTTPS없이 진행되는 모든 것이 모든 사람들이 볼 수 있도록 열려 있음을 의미합니다. –

+0

http 만 사용하려는 경우 사용자가 vpn을 사용하지 않으면 해커가 사용자의 사용자 이름과 비밀번호를 이미 가져올 수 있습니다. 세션을 생각할 필요조차 없습니다. –

1

난 당신이 염을 생성하고 세션과 DB를 aswell에 저장하고, 조건을 만들 수 있습니다 나는 귀하의 사이트에 매번 사용자 로그인 성공적으로 접근을 제안하고자 Z42 또한

에 동의 사용자가 이미 로그온했는지 여부를 확인하려면 여러 사용자가 동일한 계정으로 두 번 이상 로그온하지 못하도록하고 사용자가 로그 오프 할 때 데이터베이스에서 SALT를 삭제하십시오.

+0

제안 해 주셔서 감사합니다. 매우 도움이됩니다. 나는이 기법을 사용하게 될 것이다. –

+1

당신을 환영합니다. :) –