2009-04-05 4 views
2

사람이 두 번 투표를하지 못하게하는 가장 좋은 방법은 무엇입니까? 어떻게 사용자의 IP 주소를 얻을 수 있습니까? 대형 네트워크에 있다면 어떨까요? 해당 네트워크의 모든 사용자가 동일한 IP를 표시합니까? 감사jsp get ip address


UPDATE : request.getRemoteAddr()와 request.getRemoteHost() 서버 이름이 아닌 클라이언트의 호스트 이름과 IP를 반환합니다. 다른 누구나 밝은 아이디어가 있습니까?


좋아, 투표 두 번 잊어 버려. 임 그냥 사용자의 IP 주소를 얻으려고? 나는 request.getRemoteAddr()과 request.getRemoteHost()를 시도하고 메신저가 서버 주소를 얻는다고 생각한다. 나는 두 개의 별도의 네트워크에 액세스 할 수 있으며 request.getRemoteAddr()를 사용합니다.이 문자열로 요청을 전송 에이전트의 IP 주소를 반환, 동일한 IP 주소 :(당신의 JSP에서

답변

9

을 얻고있다.

또한, request.getRemoteHost는()이 완전한 호스트 이름을 얻기 위해 시도합니다. 그것은 그러나 이름을 확인할 수없는 경우, IP 주소는 getRemoteAddr().

0

에 반환됩니다 request.getRemoteAddr()을 사용하여 IP 주소를 가져올 수 있습니다. 네트워크가 NAT를 사용하는 경우 라우터를 사용하는 경우 모든 사용자가 동일한 주소를 받게됩니다.

2

사용자가 NAT router 또는 proxy server보다 뒤처진 경우 동일한 IP 주소로 표시됩니다. 따라서 사용자가 한 번 투표 할 수있는 최상의 방법은 아닙니다.

다른 대안은 cookies이지만, 쿠키를 지우고 다시 투표하는 것도 가능합니다.

2

AFAIK 인증은 두 번째 투표를 방지하는 유일한 방법입니다. 분명히 이것이 항상 가능한 것은 아니기 때문에 단일 사용자가 여러 표를 던질 가능성을 완화해야합니다.

  • 소스 IP별로 투표를 제한하십시오. getRemoteAddr()을 사용하여 ... 시간당 투표 ... ... 분당 투표 ...를 허용 하시겠습니까? ... 얼마나 많은 투표를 할 것인가에 달려 있습니다. 경험에 따라 번호를 조정하십시오.
  • 모든 투표 설문에 대한 응답에 cookie을 심어두면 투표가 종료 된 후에 만료됩니다.
  • RefererUser-Agent과 같은 헤더를 확인하고 유효성을 검사하여 요청을 위조하는 것이 더 어렵게 만드십시오.
2

라우터/방화벽 뒤에있는 클라이언트의 IP를 얻으려면 request.getHeader("X-FORWARDED-FOR")을 사용할 수 있습니다.

상기 X 전달-FOR (XFF) HTTP 헤더 는 HTTP 프록시 또는 부하 분산을 통해 웹 서버에 접속하는 클라이언트 의 발신 IP 주소를 식별하기위한 사실상의 표준이다. http://en.wikipedia.org/wiki/X-Forwarded-For

이 값은 사용자와 클라이언트 사이의 프록시에 의해 변경 될 수 있다는 것을,하지만 명심하십시오.비록 이어야합니다 올바른 IP가 있어야합니다.

0

JSP 페이지에 다음 표현식을 사용하십시오. ${pageContext.request.remoteAddr}