Лучший способ предотвратить игры с анонимным голосованием

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

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

Мой сайт как таковой не основан на учетной записи, хотя он собирает данные Twitter, поэтому есть возможность использовать Twitter OAuth как средство идентификации.

Какие существующие системы существуют и как они это делают?


person Chris    schedule 19.10.2010    source источник
comment
возможный дубликат Ограничить 1 голос на IP-адрес?   -  person bzlm    schedule 20.10.2010


Ответы (7)


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

Подход с использованием файлов cookie очень хрупок, поскольку файлы cookie можно легко удалить. Подход с IP-адресом имеет недостаток, который вы сами описали.

person Klaus Byskov Pedersen    schedule 19.10.2010
comment
Могу ли я использовать их логин в Твиттере в качестве входа на мой сайт? Чтобы, пока они вошли в твиттер, они могли получить доступ к моему сайту? - person Chris; 19.10.2010
comment
@ Крис, да. Вероятно, самым простым способом будет использование стороннего поставщика системы единого входа, такого как janrain.com. - person Klaus Byskov Pedersen; 19.10.2010
comment
Не всегда легко удаляется. stackoverflow.com/questions/3968328/ - person bzlm; 19.10.2010

Один шаг к системе аутентификации пользователя, но не все сложности:

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

Возможно, стоит сделать дополнительный шаг.

Дайте нам знать, что вы в конечном итоге собираетесь.

person Question Mark    schedule 19.10.2010
comment
Это не сработает так хорошо. У меня есть свой домен. Я могу иметь любое электронное письмо, которое я хочу в нем. Другой пример: если ваша электронная почта — [email protected], вы можете использовать [email protected] [email protected] и т. д. (текст после + игнорируется и доставляется в вашу учетную запись). Вы также можете включить точки в свое имя пользователя. (Это работает только для адресов Gmail!) - person Pedro Loureiro; 25.01.2011

Если вы все-таки хотите использовать файлы cookie, используйте evercookie.

evercookie — это доступный API javascript, который создает чрезвычайно постоянные файлы cookie в браузере. Его цель — идентифицировать клиента даже после того, как он удалил стандартные файлы cookie, флэш-файлы cookie (локальные общие объекты или LSO) и другие.

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

Конечно, мультибраузерный читерство не пострадает.

person bzlm    schedule 19.10.2010
comment
Имейте в виду: если вы зайдете на сайт evercookie, он (попытается) поместить evercookie в ваш браузер. Комментарии к недавней публикации Брюса Шнайера содержат интересное обсуждение сайта: schneier.com/blog/archives/2010/09/evercookies.html - person APC; 19.10.2010
comment
@APC Почему это требует предупреждения? Я думаю, что большинство сайтов при посещении пытаются поместить куки в мой браузер. :) - person bzlm; 19.10.2010
comment
Дело в том, что evercookies заключается в том, что программное обеспечение попытается передать вам один из своих uber-cookie, даже если вы настроили свой браузер так, чтобы он не принимал сторонние файлы cookie. Конечно, большинству людей все равно. Но некоторые люди довольно сильно раздуваются по этой теме. - person APC; 19.10.2010
comment
@APC Некоторые пользователи... и Европейский Союз. :) blogs.wsj.com/digits /2009/11/11/europe-approves-new-cookie-law - person bzlm; 19.10.2010
comment
+ за ссылку на сайт evercookie. Хороший пересмотр всего, что следует регулярно очищать, чтобы сохранить конфиденциальность. - person Danubian Sailor; 25.01.2011

От каких игр вы хотите защитить себя? Кто-то создал пару ботов и завалил вас тысячами (миллионами) запросов? Или кто-то, у кого нет ничего лучше, и пытается набрать 10-20 голосов?

Да, я знаю: и то, и другое — но какое из них вас больше всего беспокоит?

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

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

Другой пример: если ваш адрес электронной почты myuser*@gmail.com*, ​​вы можете использовать «[email protected]», [email protected] и т. д. (знак плюс и текст после того, как оно будет проигнорировано и доставлено на ваш счет). Вы также можете включить точки в свое имя пользователя ([email protected]). (Это работает только для адресов Gmail!)

Чтобы защититься от людей, я не знаю, какие файлы cookie использовать, но это может быть хорошим выбором. Использование OAuth, интегрированного с Twitter, FB и другими сетями, также может работать хорошо.

Кроме того, помните: требование электронной почты для голосования отпугнет многих людей! Вы получите гораздо меньше голосов!

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

person Pedro Loureiro    schedule 25.01.2011
comment
ой, я только сейчас заметил, что это старый пост! - person Pedro Loureiro; 25.01.2011

Другой подход, просто чтобы предоставить альтернативу:

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

Итак, установите файлы cookie, регистрируйте каждое голосование, а затем (или через определенный промежуток времени?) просматривайте результаты и удаляйте дубликаты на основе значений файлов cookie, комбинаций IP/UserAgent и т. д.

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

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

person nnevala    schedule 19.10.2010

Хотя я бы, наверное, не стал этого делать сам, но посмотрите на эти куки, от них довольно сложно избавиться:

http://samy.pl/evercookie/

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

person Andre    schedule 19.10.2010
comment
Кто-то предложил и электронную почту. :) stackoverflow.com/questions/3968328/ - person bzlm; 19.10.2010

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

Этот evercookie легко заблокировать, потому что он основан на java-скрипте. Злоумышленник вряд ли будет использовать браузер, с помощью curl он может генерировать тысячи запросов. Однако такие инструменты обычно плохо поддерживают javascript.

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

person FolksLord    schedule 25.01.2011