Уникальные IP-адреса в системе голосования

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

Какой был бы самый практичный подход? Любые другие предложения более чем приветствуются.

Solutions Collecting From Web of "Уникальные IP-адреса в системе голосования"

Недостижимо-совершенное: (уникальный номер правительства)

  • Пользователь голосует с использованием проверяемого уникального идентификатора, такого как номер социальной защиты или паспорта

Близкое для реальности: (электронная почта / сторонняя аутентификация)

  • пользователь регистрирует учетную запись с адресом электронной почты и паролем (или google / facebook)
  • 1 адрес электронной почты = 1 голос
  • Пользователи не могут очистить файлы cookie и получить дополнительные голоса, приложение не закрывает 1000 с помощью общих IP-адресов

Хорошая мысль-но-ложь-предлог (IP-адреса)

  • Офисные здания: 1000 пользователей на одном и том же внешнем IP-сервере закрываются
  • Университет: подключитесь к беспроводной сети в классе. Голос. Перейдите в следующий класс. Повторно подключитесь и проголосуйте

Crash-And-Burn (Cookies)

  1. Голос
  2. ctrl shft del enter
  3. голос
  4. повторение

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

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

Важная заметка

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

Полностью надежный путь будет сложным. У обоих ваших идей есть проблемы – файлы cookie могут быть отключены, и у одного пользователя может быть много IP и / или многие пользователи могут использовать один и тот же IP-адрес. Заставлять ваших пользователей регистрироваться и разрешать только один голос на зарегистрированную учетную запись будет лучше, но тогда кто-то может зарегистрироваться для нескольких учетных записей. Принудительная проверка подлинности электронной почты для каждой учетной записи несколько уменьшает ее, но вы все равно можете обойти ее, подписавшись на несколько разных электронных писем.

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

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

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

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

Сохранение индивидуальных голосов в базе данных с использованием IP и голосование. Это создает громоздкость, но гарантирует, что каждый пользователь получает один голос.

Это хорошо, но медленнее второго, но все же я рекомендую это.

Хранение файла cookie на конце пользователя, чтобы проверить, голосовали ли они или нет. Это самый простой, но, очевидно, пользователи могут просто отключить файлы cookie.

вы правы, это небезопасно, но немного быстрее, но мне это не нравится

Независимо от того, что вы решаете, IP-адреса не будут безопасными вообще. Пользователь может в основном получить доступ из другого места и снова проголосовать и т. Д. Cookie – это решение, но не оптимизированное из-за возможности удаления (так что вы рискуете процессом распознавания пользователей). Вам нужно будет обрабатывать больше данных от пользователя, чтобы они могли безопасно записывать свой вариант.

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

Надеюсь это поможет,

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

Печенье можно стереть

IP-адрес предназначен для изменения. (также у нескольких пользователей может быть один IP-адрес)