2010-07-06 5 views
3

내 웹 응용 프로그램에 액세스하는 모든 사용자가 한 대의 컴퓨터에서만이를 수행 할 수 있어야하므로 100 명의 사용자가 100 대의 컴퓨터를 사용해야합니다. 가장 좋은 해결책은 무엇입니까? 처음 로그인 할 때 IP를 감지하고 저장하는 중입니까? 나는 IP가 세션의 평생 동안 심지어 바뀔지도 모른다라고 생각한다? 또한 사용자가 처음 로그인 할 때 쿠키를 저장하려고합니다. 그런 다음 암호와 사용자 이름으로 이미 수행 한 것과 마찬가지로 쿠키를 사용자에게 할당합니다. 그리고 쿠키가 있는지 응용 프로그램 검사에 액세스 할 때마다이 쿠키를 할당합니다.웹 응용 프로그램에 대한 액세스를 하나의 시스템으로 만 제한하는 방법은 무엇입니까?

귀하의 의견에 가장 적합한 해결책을 알려주십시오. 저의 백엔드는 PHP/mysql입니다.

편집 : 명확히해야합니다 ... 이것은 일반적인 세션 관리에 추가됩니다. 하나의 특정 컴퓨터에서만 웹 응용 프로그램에 로그인 할 수 있도록 사용자를 제한해야합니다. 따라서 사용자가 원래 자신의 컴퓨터에서 직장에 로그인하여 IP/쿠키/등을 저장했다면 클라이언트가 로그 아웃 (또는 그렇지 않은 경우)하고 집으로 돌아가 로그인을 시도 할 수 없습니다. 나는 그 끔찍한 생각에 동의하지만 클라이언트는 주장한다.

+0

PHP 및 MySQL 태그가 추가되었습니다. – mcandre

+0

IP는 좋은 해결책이 아닙니다. 여러 대의 컴퓨터가 라우터 뒤에있을 수 있으므로 사이트에 액세스 할 때 모두 동일한 IP를 사용하게됩니다. –

+0

왜이 제한 사항을 적용 하시겠습니까? 나는 여러 대의 컴퓨터를 사용하여 여러 사이트를 방문합니다. 다른 컴퓨터에서도 내 사이트를 방문하도록 허용하지 않으면 정말 기분이 좋을 것입니다. 아마도 관련 : [사용자가 제출물에 투표하도록 허용하는 PHP 웹 앱 만들기 - 어떻게하면 학대를 최소화 할 수 있습니까?] (http://stackoverflow.com/questions/2602702/creating-a-php-web-app-to-allow- 사용자 투표에서 제출까지 - 어떻게 최소화 할 수 있습니까?) –

답변

6

모바일 클라이언트 또는 유무선 네트워크를 전환하는 클라이언트의 경우 IP 주소가 변경 될 수 있습니다. 최선의 방법은 처음 연결될 때 각 클라이언트에 무작위로 생성 된 UID를 제공하는 것입니다 (아직 쿠키가없는 경우). 그런 다음 동일한 사용자 이름이 두 개의 다른 UID를 사용하여 연결하고 있지 않은지 확인할 수 있습니다.

트릭은 사용자가 다른 컴퓨터로 이동하면 잠겨 있지 않도록이 UID 시간을 확인해야한다는 것입니다. 아마도 UID 로의 변경은 괜찮지 만 이미 사용 된 UID로 되돌릴 수는 없습니까?

+1

+1 : 알 수있는 유일한 방법은 사용자가 이미 로그인했는지 확인하는 것입니다. –

+0

나는 비슷한 일을하고 싶습니다. 두 번째 요점은 나에게 명확하지 않습니다. plz이 자세히 설명해줍니다. –

-1

하지 마라. 많은 사람들이 여러 컴퓨터에서 귀하의 웹 사이트에 액세스하게되며 차단하면 불평 할 것입니다.

+0

네, 왜 이런 일을 할 수 있겠습니까? – Zak

+3

가끔은, 그들이 요구하는 것에 동의하지 않더라도, 이유가 있다고 가정해야한다고 생각합니다. 이 경우 클라이언트의 요청 (편집을 통해)이라고 명시되어 있습니다. 문제는 그들이해야하는지 아닌지, 그들이 그것을 할 수있는 방법입니다. 또한 재미있는 점도 생각해 볼 수 있습니다. 그것은 일부 관점에서 웹 기반 응용 프로그램의 개념을 무시합니다 (개별 사용자를 개별 컴퓨터로 제한하여 분산 된 특성을 무시함).하지만 적어도 흥미로운 과제가 될 수 있습니다. –

+0

클라이언트가 브리지에서 최상의 방법을 물으면 게시해야합니다 "네 발을 사용하니?" – mcandre

0

사용중인 솔루션에 따라 최상의 솔루션이 이미 웹 서버에 내장되어 있습니다. 그것은 세션을위한 것입니다. ASP.NET/IIS에는 일반적으로 세션 당 20 분의 시간 제한이 있습니다.

사용자가 다른 컴퓨터를 사용하여 웹 응용 프로그램에 액세스하는 경우 세션 시간 초과로 인해 유휴 상태 인 컴퓨터에서 연결이 해제됩니다.

UPDATE

당신은 고유 한 자신의 컴퓨터의 MAC 주소로 사용자를 제한하는 것을 고려할 수 있습니다.

+0

MAC 주소가 브라우저에 의해 서버로 전송되지 않습니다. –

+0

고유성이 보장되지 않습니다. 나는 모든 것들의 DIP 스위치로 MAC을 설정할 수있게 해주는 오래된 SUN 박스를 보았다. – Curtis

+0

좋습니다, IE 용 ActiveX를 사용하거나 MAC 주소를 읽을 수있는 firefox/safari/chrome과 같은 다른 브라우저 용 플러그인을 개발할 수 있습니다. – SoftwareGeek

0

불행하게도,의 IP는 여러 가지 이유로 시스템 특정되지 않습니다 :

  1. IP 주소없이 통지 (사용자조차 인식하지 않을 수 있습니다)
  2. 으로, 세션 중 변경 될 수 있습니다 대부분의 사용자는 유동 IP를 사용하므로 어떤 시점에서 가장 바뀔 것입니다.
  3. 노트북, 태블릿 또는 휴대 전화와 같은 컴퓨터의 경우 IP 주소는 현재 서비스 제공 업체를 기준으로합니다.
  4. 프록시를 사용하는 모든 사용자는 당신은 하나의 IP로, 그래서 당신은 여전히 ​​de에있을 수 없을 것입니다. 한 컴퓨터에서 다른 컴퓨터로 이동 한 경우 ttect

대신 세션에 대해 고유 한 키를 생성하고 사용자 이름과 함께 추적하십시오. 동일한 사용자 이름이 이미 다른 활성 세션에 있으면 로그인 할 수 없게하십시오.

+0

이것은 내부적으로 기반을 둔 응용 프로그램입니다. 단일 도메인에서 실행되는 시스템 인 경우. IP는 예측 가능하지만 여전히 고유하지는 않습니다 (IP가받는 임대에 따라 다름) –

2

keygen을 사용하여 생성 된 클라이언트 측 SSL 인증서로 클라이언트를 실행하여 단일 사용자 에이전트로 제한 할 수 있습니다 (예 : 세션 종료 이벤트가 손실되는 경우를 대비하여 자동으로 플러시하는 방법이 필요함). 요소를 사용하면 브라우저에서 키 쌍을 생성하고 사용자 에이전트에 비공개 키를 유지 한 다음 SPKAC를받습니다.이 SPKAC을 사용하여 인증서를 작성한 다음 사용자 에이전트로 다시 보내서 설치합니다 그때부터 HTTP + TLS를 통해서만 특정 브라우저에서 사용자를 식별하는 데 사용할 수 있습니다.

다른 건 단순히 100 % 작동하지 않습니다 - 당신이 작동하는 것처럼 보일 방법을 해킹 할 수 있지만 (뭔가 잘못 될 때까지를 그리고 그것은 작동하지 않습니다) :

+0

인증서를 내보내고 집에 복사 할 수 있습니다. – grundprinzip

0

그것을 매우 내부 응용 프로그램 인 경우 그 회사 내에서만 사용되므로 전 세계적으로 운영하지 않는 중소기업이 인터넷 액세스 제공 업체로부터 일정량의 IP를 보유하게되므로 IP 범위를 정의 할 수 있습니다.

$ _SERVER의 일부 정보를 사용하여 단일 웹 브라우저 (HTTP_USER_AGENT)와 단일 포트 (REMOTE_PORT)의 조합으로 사용자를 제한 할 수있는 방법을 생각해 볼 수도 있습니다.

그러나이 모든 해결책은 나쁘거나 나쁘다. 기술적으로는이 문제를 해결할 수 없다 (클라이언트가 모든 컴퓨터가 고정 IP를 유지한다는 보장이 없으면 다른 문제는 사소한 것임) .

관련 문제