Предотвращение фальсификаций голосования - как обеспечить законность голосования

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

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

Кто-нибудь знает лучший способ реализовать это? Конечно, это было сделано раньше.

Любая помощь приветствуется. Заранее спасибо.

3 ответа

Решение

Все зависит от суммы, которую вы хотите помешать пользователю.

  • Вы можете использовать капчу, чтобы сделать автоматическое голосование невыполнимым, но это не мешает ни одному выделенному человеку глупо голосовать.
  • Вы можете требовать, чтобы пользователи проходили аутентификацию перед голосованием.
  • Вы можете потребовать от пользователя указать адрес электронной почты, а затем отправить уникальную одноразовую ссылку для отправки голоса. Это похоже на то, как вы регистрируете пользователя, только если у него есть действующий адрес электронной почты. Отсюда вы можете отказаться от нескольких голосов за один и тот же адрес электронной почты.
  • Сохраните файл cookie, как только пользователь проголосует, чтобы указать, что пользователь уже проголосовал. Это легко обойти, но может остановить менее технически склонного пользователя.
  • Используйте openID, например, с dotnetopenauth, для аутентификации в третьей части, такой как Google или Yahoo, чтобы получить доступ к области голосования, а затем запишите openID пользователя для будущих запросов.
  • Запишите нажатия клавиш пользователя (динамика клавиатуры), данные httpcontext и время завершения голосования для статистического анализа возможности повторного голосования с использованием алгоритма статистической кластеризации, такого как k-means.
  • С этого момента все становится безумнее, поэтому я остановлюсь здесь.

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

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

Проверка IP-адресов избирателей - это относительно недорогой механизм, позволяющий не допускать многократного голосования, если вам больше нечем заняться, но, как вы заметили, он может вызывать затраты с точки зрения законных пользователей, которым запрещено голосовать, и ничего не делает чтобы предотвратить суммирование голосов путем набора не пользователей, каждый из которых будет иметь законно отличающийся IP-адрес (например, "Привет, Слэшдот /Reddit/Pharyngula/IRC-Channel-X, все проголосуют за эту опцию в этом опросе!"), Однопользовательское дополнение может все еще быть сделано с ботнетами или большими списками прокси или учетными записями на нескольких машинах (то есть любой университетской лаборатории не за NAT).

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

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

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

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

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

Другие вопросы по тегам