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

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

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

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

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

Ответ 1

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

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

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

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

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

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

Crash-And-Burn (Cookies)

  • Vote
  • ctrl shft del enter
  • Голосование
  • повторить

Ответ 2

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

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

Важное примечание

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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

Ответ 7

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

Файлы cookie могут быть стерты

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