Предотвратить дублирование анонимного голосования

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

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

Есть ли решение на стороне клиента?


person Behzad Shirani    schedule 28.11.2012    source источник
comment
Вам нужно будет опубликовать более подробную информацию и некоторый код. Как работает это голосование? вы сохраняете данные в БД? Вы сохраняете выбор в jquery и/или cookie?   -  person Ravi Y    schedule 28.11.2012
comment
У моей идеи пока нет кодов!!! Но я хочу, чтобы пользователь мог проголосовать за комментарий, это приращение будет сохранено в БД, и единственное, что нужно сохранить, - это приращение положительных и отрицательных голосов в БД. Все посетители могут голосовать за комментарии, и каждый человек может голосовать только один раз.   -  person Behzad Shirani    schedule 28.11.2012


Ответы (4)


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

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

Как уже упоминалось, одно простое решение — разрешить один голос на IP-адрес. Неплохая идея, но посмотрите это обсуждение, почему это тоже не очень хорошая идея: Ограничить 1 голос с IP-адреса? Это может помешать законным пользователям голосовать (представьте, что два соседа по комнате используют личный маршрутизатор), и это не остановит вброс бюллетеней (я мог бы проголосовать дома, а затем снова на работе). Это становится еще более сложным, если учесть, что интернет-провайдеры, такие как AOL (так гласит народная мудрость, по крайней мере, я только предполагаю, что это все еще верно), которые часто переназначают адреса (возможно, якобы для защиты конфиденциальности своих пользователей).

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

Более сложное решение состоит в том, чтобы запрашивать учетные записи пользователей, тщательно следить за признаками злоупотреблений и блокировать учетные записи, подозреваемые в мошенничестве. Я предполагаю, что это далеко выходит за рамки всего, что вы готовы сделать. Разве что кто-то опубликовал бесплатную универсальную реализацию такой штуки?

person Chris Martin    schedule 28.11.2012

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

person Andrei Kapelchik    schedule 28.11.2012
comment
Это еще проще, чем в браузерах с режимом инкогнито. - person Chris Martin; 28.11.2012

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

person depwl9992    schedule 28.11.2012
comment
Вы правы, но я хочу, чтобы анонимные пользователи могли оценить комментарий. Повторное голосование не имеет значения. - person Behzad Shirani; 28.11.2012

В порядке. Еще одна плохая практика. Просто попробуйте обмануть анонимного избирателя. Когда он проголосует первый раз - напишите в свою БД +1 и куки с дополнительной суммой голосов за текущего анонимного пользователя. Когда он снова проголосует, просто добавьте +1 к количеству файлов cookie, а не к вашей БД, и обновите пользовательский интерфейс. Таким образом, пользователь не знает, что он не может голосовать более одного раза, и не пытается очистить свои куки или что-то еще. Конечно, вы не можете использовать этот метод ни для каких соревнований, только для статистики. А в вашем случае не стоит устанавливать этот куки для зарегистрированных пользователей и проверять их голоса стандартным способом.

person Mark Twain    schedule 28.11.2012