Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Например:

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

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top