2009-04-05 2 views
2

Какой лучший способ помешать кому-то голосовать дважды? Как получить IP-адрес пользователей? Что делать, если они находятся в большой сети? будут ли все в этой сети показывать тот же ip? благодаряjsp получить ip-адрес


UPDATE: request.getRemoteAddr() и request.getRemoteHost() возвращает имена сервера, а не имя хоста клиента и IP. У кого-нибудь есть какие-то яркие идеи?


Хорошо, так что давайте забудем о голосовании дважды. Я просто пытаюсь получить IP-адрес пользователей? Я попробовал request.getRemoteAddr() и request.getRemoteHost() и подумал, что я получаю адрес серверов. У меня есть доступ к двум отдельным сетям и я получаю один и тот же IP-адрес :(

ответ

9

В вашей JSP, используйте request.getRemoteAddr(). Это возвращает IP-адрес агента, который послал запрос в виде строки.

Кроме того, request.getRemoteHost() будет пытаться получить полное имя хоста. Если он не может разрешить имя однако, IP-адрес будет возвращен как в getRemoteAddr().

0

Вы можете получить IP-адрес с помощью request.getRemoteAddr(). Если сеть использует NAT маршрутизатор, все пользователи получат тот же адрес, хотя

2

Если пользователи находятся за NAT router или proxy server, вы увидите их с тем же IP-адресом. Таким образом, это не лучший способ разрешить пользователям голосовать один раз.

Альтернативой было бы использовать cookies, но опять же, можно стереть cookie и проголосовать снова.

2

AFAIK ТОЛЬКО способ предотвращения второго голосования - аутентификация. Очевидно, что это не всегда возможно, поэтому вам нужно уменьшить вероятность того, что один пользователь набрал бы тонну голосов.

  • Дросселировать по источнику IP. Используйте getRemoteAddr(), чтобы разрешить, скажем ... голосование в час? ... в минуту? ... это будет зависеть от того, сколько голосов вы ожидаете. Отрегулируйте количество в соответствии с опытом.
  • Завод cookie ответа на каждый опрос, срок действия которого истекает после закрытия бюллетеней.
  • Сделать сложнее запросить запросы, проверив и подтвердив заголовки, такие как Referer и User-Agent.
2

Чтобы получить IP-адрес клиента за маршрутизатором/брандмауэром, вы можете использовать request.getHeader("X-FORWARDED-FOR").

X-Forwarded-For (XFF) HTTP-заголовка является фактическим стандартом для идентификации инициирующий IP-адрес клиента , подключенного к веб-серверу через прокси-сервер HTTP или балансировки нагрузки. http://en.wikipedia.org/wiki/X-Forwarded-For

Имейте в виду, однако, что это значение может быть изменено с помощью прокси между вами и клиентом.Хотя это должно быть быть правильным IP.

0

На странице JSP просто используйте это выражение: ${pageContext.request.remoteAddr}

Смежные вопросы