2010-08-13 3 views

답변

7

IP 주소를 기반으로 한 모든 솔루션의 문제점은 사용자가 여러 IP 주소를 통해 요청을 라우팅하는 프록시 서버를 사용하는 경우 사용자가 로그인 상태를 유지할 수 없다는 의미로 실패 할 수 있다는 것입니다.

대신 할 수있는 일은 사용자가 로그인 할 때 새로운 세션 토큰을 제공하고 같은 사용자의 모든 이전 세션 토큰을 만료시키는 것입니다.

이렇게하면 모든 유효한 세션 토큰 및 연결된 사용자의 테이블을 유지해야합니다. PHP의 기본 제공 세션 처리 기능은 많은 수정 작업 없이는 가능하지 않을 수 있습니다.

+0

+1 이것은 더 나은 솔루션이라고 생각합니다. 또한 JavaScript를 사용하여 클라이언트를 폴링하고 15 분 이내에 설문 조사가 없으면 세션이 만료됩니다. JavaScript 사용자가 아닌 사용자와 대항하기 위해 모든 페이지로드시에 만료 기간을 연장하십시오. – alex

+0

그래, 개인적으로 비 Javascript 라우트를 가지 겠지만 기존 세션의 모든 페이지로드시에 만료 시간을 연장하십시오. – thomasrutter

+0

@alex 왜 모두 투표합니까? 어떻게 도움이 될 수 있습니까? –

1

사용자가 로그인하면 해당 IP 주소가 데이터베이스에 저장됩니다. IP가 변경되면 다시 로그인해야합니다.

더 쉽게 SessionID를 저장하는 것입니다. 변경되면 이전 세션이 무효화됩니다.

+0

실제로 반대가되어서는 안됩니까? 사용자가 다른 컴퓨터에서 로그인하면 IP는 동일하게됩니다! – PatrickS

+1

두 컴퓨터가 방화벽/NAT (예 : 회사 네트워크, 홈 네트워크 등) 뒤에있는 경우 IP는 동일합니다. 그렇지 않은 경우 IP 주소가 다를 가능성이 큽니다. – bisko

0

로그인 할 때 데이터베이스에 사용자의 IP 주소를 저장하고 로그 아웃 할 때 (또는 로그 아웃 할 때) 해당 IP를 지울 수 있습니다. 사용자가 로그인을 시도했지만 데이터베이스에 다른 IP가 이미 저장되어있어 2 대의 다른 컴퓨터에서 로그인 중임을 나타낼 수 있습니다 .... 정확하지는 않지만 실제로 작동 할 수도 있습니다.

1

' 이것을 막아라. 그리고해서는 안됩니다.
대신 이전에 로그인 한 모든 사용자를 수동으로 로그 아웃해야합니다.
사용자의 데이터베이스에서 세션 ID를 추적하고 ID가 1과 같지 않은 세션을 닫은 다음 성공적으로 로그인 한 후 데이터베이스에 저장합니다.
이렇게하면 모든 동시 사용자가 계속 로그인하여 서비스 사용에 대한 모든 노력을 망칠 수 있습니다.

+0

OMG 바보 같은 원숭이가 다시 공격합니다. 이 이론가들 중 어느 누구도 그런 메커니즘을 실제로 구현하지 못했지만 모두가 그들의 해결책과 의견을 가지고 있습니다. –

+0

당신은 왜 이걸 막을 수 없다고 말하고 있습니까? 그것은 할 수 있습니다, 어쩌면 성능 또는 가장 큰 생각이 아니지만 할 수 있습니다. – Saikios

+0

+1 어느 정도 동의합니다. 세션을 IP 주소로 제한하면 오류가 발생하기 쉬워 합법적 인 사용자가 사이트에 액세스하지 못하게됩니다. – rook

0

사용자가 로그인 한 현재 (마지막) IP를 추적하는 것이 좋습니다. 사용자가 로그인하면 해당 IP를 변경하십시오. 인증 절차의 마지막 IP 부분에 대해 현재 IP를 확인합니다. 그것이 다른 경우 로그 아웃하십시오. 그런 다음 다시 로그인 할 수 있지만 다른 컴퓨터의 로그인을 시작하게됩니다.

관련 문제