Предотвращение двойного голосования

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

какой метод лучше всего использовать? Нужно ли использовать капчу для защиты от спама?

подсчеты голосов, как ожидается, будут миллионами, и тема не очень критична, пока я получаю точность 95%, что было бы хорошо. Спасибо.

3 ответов


вы можете объединить эти два метода:

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

Это позволит нескольким людям голосовать из одной и той же сети, но все же предотвратить чрезмерное мошенничество.

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


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

используя IP-адреса также будет работать, но, как сказал @Michael Dillon, люди с тем же IP-адресом (тот же маршрутизатор) не смогут голосовать.


У вас есть несколько вариантов, некоторые или все из которых вы можете использовать.

вы можете записать IP, а затем проверить IP, но тогда это не указывает на конкретного человека только компьютер, а иногда и не только один компьютер.

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

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

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