2010-05-28 5 views
1

나는 항상 내가 만든 로그인 시스템이 공격에 취약한 지 궁금합니다.로그인 시스템을 만드는 가장 좋은 방법은 무엇입니까?

많은 다른 프로그래머들도 세션을 사용하여 특정 토큰 토큰을 보유하여 로그인 상태를 알고 있습니다. 사용자 이름 또는 때로는 저장된 상태를 보유하는 쿠키.

내가 궁금해하는 것은 이것이 올바른 방법일까요? 이보다 더 좋은 접근 방법이 있습니까?

+0

합니다. 당신은 당신의 기준과 '더 나은'것에 대한 제약이 무엇인지 말하지 않습니다. – symcbean

답변

1

세션에서 사용자 정의 검사를 만들 수 있습니다. 동일한 사용자 에이전트와 동일한 IP 주소에서 만들어 졌는지 확인하십시오.

이외에도 세션은 매우 견고합니다. 로그인 섹션에서

, 당신은 같은 것을 할 것 :

$_SESSION['_user_agent'] = $_SERVER['HTTP_USER_AGENT']; 
$_SESSION['_remote_addr'] = $_SERVER['REMOTE_ADDR']; 

을 그리고 당신은 모든 요청에 ​​체크 할 수 있습니다 : 너무 일반적인

function sessionIsOK() 
{ 
    return ($_SESSION['_user_agent'] == $_SERVER['HTTP_USER_AGENT'] && 
     $_SESSION['_remote_addr'] == $_SERVER['REMOTE_ADDR']); 
} 
+0

+1, 사용자 에이전트 확인이 의미가 있습니다. 그러나 원격 IP 주소는 신뢰할 수 없습니다. 때로는 사용자가 요청에 따라 액세스 IP가 다른 프록시 클러스터 뒤에 앉아 있습니다. (가장 좋은 예 : AOL 사용자). – mario

+0

나는 그것에 대해 몰랐다. 연결이 끊어지지 않는 한 모든 IP는 꽤 안정적이라고 생각했습니다. – arnorhs

0

https를 사용하는지 여부가 중요하다고 생각합니다. https 대신 http를 사용하는 경우 시스템에 많은 취약점이 있습니다. 예 : 재생 및 man-in-the-middle/relay.

0

일반적인 PHP 로그인 시스템의 대안은 HTTP 인증입니다. 세션/쿠키를 사용할 필요가 없습니다. 특히 HTTP 다이제스트 인증은 암호화되지 않은 < 양식 > 로그인보다 안전합니다. 대부분의 공유 호스팅 제공 업체는 SSL을 제공하지 않으며 대부분의 FLOSS 웹 응용 프로그램은 거의 설치하지 않습니다.

그러나 무거운 DHTML/AJAX 사용으로 만 완화 할 수있는 몇 가지 유용성 단점이 있습니다. 그리고 서버 성능이 약간 저하됩니다. 그리고 가장 중요한 점은 대부분의 프로그래머에게 바로 구현하기가 너무 어렵다는 점입니다.

간단한 PHP 로그인 시스템이면 충분하면 응용 프로그램의 유형에 따라 다릅니다.

+1

하지만 HTTP 인증 버기는 일부 브라우저가 아닙니다. – Starx

+1

아니, 정말로, 그렇지 않습니다. 꽤 오래된 기능입니다. 그러나 절대적으로해야하는 경우가 아니면 절대 사용해서는 안됩니다. –

관련 문제