Ограничить 1 голос за IP-адрес? - PullRequest
6 голосов
/ 07 августа 2009

Что я действительно хочу, так это ограничить 1 голос на человека, но следующая лучшая вещь, о которой я могу подумать, - это ограничить 1 голос на IP-адрес, чтобы злонамеренные пользователи / хакеры не могли серьезно изменить систему голосования моей компании. Я думал об использовании базы данных для отслеживания IP-адресов.

Обновление: Извините за неясность в первый раз aruond. Что я хотел знать, если ограничение 1 голоса на IP-адрес - это хорошая стратегия, ограничивающая 1 голос на человека. По сути, я хотел знать, равен ли 1 уникальный IP-адрес одному человеку. Люди уже упоминали, что прокси и маршрутизаторы повторно используют IP-адреса, поэтому, к сожалению, многие люди могут использовать один и тот же IP-адрес.

Спасибо. Я думаю, что для моего случая лучше НЕ ограничивать 1 голос за IP-адрес.

Ответы [ 7 ]

18 голосов
/ 08 августа 2009

Я бы предложил не придерживаться подхода IP. Когда я смотрел на это раньше, некоторые из ваших крупных интернет-провайдеров многократно использовали IP-адреса (AOL ...), но если вы используете IP-адреса, используйте базу данных для их отслеживания. Быстрый способ сделать это состоит в том, чтобы сделать его уникальным ключом и перехватить исключение как «уже проголосовало».

Одна хорошая вещь, которую нужно добавить, это не показывать пользователю, что его голос не был засчитан, просто показывать результаты или благодарить его за голосование. Не давая этой конкретной ошибки, это труднее, а иногда даже не замечается вашими проблемными пользователями.

12 голосов
/ 07 августа 2009

Если вы используете IP-адреса, вы ограничите большинство компаний одним голосом, поскольку они направляют весь исходящий интернет-трафик через брандмауэр или прокси-сервер. Мы сделали это пару лет назад и обнаружили, что весь трафик AOL поступает только с 5 IP-адресов.

4 голосов
/ 07 августа 2009

Как правило, да, вы должны иметь таблицу базы данных для голосов и просто сохранить выбор + IP-адрес - затем при вставке выполните запрос в БД, чтобы узнать, существует ли уже запись с данным IP.

Идеальное решение заключается в том, чтобы привязать голоса к учетным записям пользователей, которые, в свою очередь, связаны с более конкретным присутствием (например, кредитной картой, мобильным телефоном или другим, менее умножаемым источником идентификации).

Какой именно вопрос вы задаете?

2 голосов
/ 27 августа 2009

Я всегда делал так, чтобы объединить пользовательский агент и IP-адрес в хеш MD5 (в некоторых случаях это позволит людям с одного и того же IP голосовать, если они используют разные браузеры) и сохранить в качестве «отпечатка пальца» для голосования добавьте базу данных и добавьте к ней уникальный ключ. Как сказал IPX Ares, оттуда вы можете поймать исключение дубликата ключа, и вы должны быть в порядке.

Если вы хотите, чтобы люди могли голосовать один раз в день, вы также можете добавить Ymd к этому «отпечатку пальца» или другим вариантам, чтобы разрешить х сумму в час или х сумму в день.

1 голос
/ 07 августа 2009

Да, использовать базу данных. Не полагайтесь на куки, они могут быть легко удалены.
На данный момент, IMO, наилучшим вариантом является ограничение голосов на основе IP.

0 голосов
/ 05 марта 2013

Еще один способ «помочь» избежать мошенничества - ввести в форму хэш-код 1 раз, а затем проверить, действителен ли он, прежде чем подсчитывать голоса.

Например:

Когда вы создаете форму голосования, вы делаете случайный хеш, сохраняете его в базе данных и помещаете в form как поле hidden. (возможно, вы захотите добавить поле даты в базу данных хэшей, чтобы вы могли очистить неиспользуемые хэши)

Затем, когда вы получите запрос POST на голосование, вы можете проверить, находится ли предоставленный хэш в базе данных, и удалить его из базы данных, чтобы его нельзя было использовать снова.


МИНУСЫ:
Может загружать базу данных с высоким IO, если трафик на странице голосования высокий.
Невозможно кэшировать страницу в виде html плана, поэтому это создает дополнительную нагрузку на веб-приложение.

0 голосов
/ 13 августа 2009

IP-адрес имеет свои ограничения, как мы уже отмечали выше, но у браузера есть много других характеристик, которые могут сдерживать вредных избирателей. Например, BrowserID отличается для каждого браузера. Вы можете использовать комбинацию BrowserID и IP-адреса для создания уникального идентификатора.

...