Что такое надежный метод для записи голосов от анонимных пользователей, без дублирования - PullRequest
32 голосов
/ 24 июня 2009

Прежде всего, я искал как мог и прочитал все вопросы, которые кажутся актуальными, но ничего конкретного на это не ответил. Это не дубликат, афаик.

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

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

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

Запись по IP кажется следующим разумным решением, но мне интересно, получат ли они слишком часто ложные срабатывания (у нескольких людей в одной локальной сети за NAT будет один и тот же внешний IP и т. Д.).

Есть ли здесь какое-то среднее положение или какой-то другой метод / комбинация, которую я пропускаю?

Ответы [ 8 ]

22 голосов
/ 24 июня 2009

Я бы собрал как можно больше данных о сеансе, не задавая никаких вопросов напрямую (браузер, ОС, установленные плагины, все с номерами версий, IP-адресом и т. Д.) И хэшировал их.

Запишите хеш и увеличьте счетчик, если хотите, чтобы было разрешено несколько голосов. Включите метку времени (ежедневно, ежечасно и т. Д.), Чтобы сделать голосование чувствительным ко времени, скажем, 5 голосов в день.

12 голосов
/ 24 июня 2009

Китайцы должны поделиться одним IPv4-адресом с сотнями других; Hp / Compaq / DEC имеет почти 50 миллионов адресов. IPv6 не помогает, поскольку все получают адреса на миллиард. Человек просто не совпадает с IP-адресом, и это понятие становится все более ложным.

Просто нет подходящих способов сделать это в Интернете. Люди - это просто концепция, неизвестная в Интернете, и любая идея представить эту концепцию вряд ли будет успешной. (Слишком много правительств не хотели бы, чтобы это произошло, например.)

Конечно, вы можете связать количество голосов на IP с количеством повторных посещений страницы с этого IP, особенно в сочетании с отслеживанием cookie. Это работает лучше всего, если вы оцените это число до начала периода голосования. Если 5% популярных статей обычно читаются 10 раз с одного IP, вероятно, 10 человек разделяют этот IP, и они должны получить 10 голосов. Файлы cookie могут использоваться для предотвращения кражи голосов друг друга, но в целом они не могут исказить ваш опрос. (Примечание: это не удается в небольших сообществах, где большая группа избирателей происходит из небольшого числа IP-адресов, особенно это происходит в университетах).

11 голосов
/ 24 июня 2009

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

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

IP более «надежен», но создает неприемлемо высокий уровень коллизий из-за NAT.

Как насчет более уникального идентификатора, состоящего из IP + user-agent (возможно, хеш)? Это фактически означает, что для каждого IP каждая точная пара версий ОС / браузера получает 1 голос, что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

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

3 голосов
/ 20 ноября 2009

Используйте постоянный файл cookie, чтобы разрешить только один голос за элемент

и записывают IP, если более 100 (1000 × 10 000?) Запросов менее чем за X минут, то «мягкая блокировка» IP

«Мягкий блок»: не показывать страницу с надписью «Ваш IP заблокирован», но показывать страницу «Спасибо за ваш голос» и НЕ записывать голос в вашей БД. Вы даже можете увеличить счетчик только для этого IP. Вы хотите, чтобы они не знали, что вы блокируете их IP.

3 голосов
/ 24 июня 2009

Что-либо, основанное на IP-адресах, не вариант - был упомянут случай NAT, но это, кажется, только в случае домашних пользователей. Существует много крупных инсталляций, использующих NAT - в некоторых корпорациях тысячи пользователей объединяются за одним IP-адресом. Есть также интернет-провайдеры, которые используют прокси-серверы для своих пользователей - еще один случай, когда вы можете иметь много тысяч пользователей, которые отображаются в вашем приложении как один адрес. Добавление уникальных комбинаций UA к этому не поможет, так как вариантов недостаточно.

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

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

В конце дня у любого интернет-опроса будут недостатки (например: http://www.time.com/time/arts/article/0,8599,1894028,00.html),, и вам придется с этим смириться.

3 голосов
/ 24 июня 2009

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

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

1 голос
/ 24 июня 2009

Две идеи, еще не упомянутые:

  • Запрашивая адрес электронной почты пользователя и отправляя ему ссылку для проверки
  • Использование капчи

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

0 голосов
/ 04 ноября 2010

У меня та же проблема, и вот что я планирую сделать ...

Установить постоянный файл cookie. Проверьте cookie, чтобы решить, можно ли отдать определенный голос. Дополнительно храните некоторые данные о запросе на голосование в виде комбинации IP-адреса + User Agent. И затем используйте это значение, чтобы ограничить нет. скажем, 10 голосов в день.

Как лучше всего создать этот хэш (IP + UA String)?

...