Уникальные IP-адреса в системе голосования - PullRequest
11 голосов
/ 15 октября 2011

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

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

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

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

Ответы [ 7 ]

25 голосов
/ 15 октября 2011

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

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

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

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

Обдуманные, но неверные притворства (IP-адреса)

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

Авария (печенье)

  1. Голосуйте
  2. Ctrl Shft Del Enter
  3. голос
  4. повтор
4 голосов
/ 15 октября 2011

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

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

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

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

3 голосов
/ 15 октября 2011

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

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

2 голосов
/ 15 октября 2011

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

Файлы cookie могут быть удалены

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

2 голосов
/ 15 октября 2011

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

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

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

2 голосов
/ 15 октября 2011

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

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

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

1 голос
/ 15 октября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...