Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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