Лучший способ предотвратить игры с анонимным голосованием - PullRequest
13 голосов
/ 19 октября 2010

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

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

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

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

Ответы [ 7 ]

11 голосов
/ 19 октября 2010

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

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

3 голосов
/ 25 января 2011

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

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

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

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

Другой пример: если ваш адрес электронной почты myuser*@gmail.com*, вы можете использовать "Myuser+1@gmail.com" myuser+2@gmail.com и т. д. (знак плюс и текст после игнорируется и доставляется на ваш счет). Вы также можете включить точки в вашем имени пользователя (my.user@gmail.com). (Только это работает на адресах Gmail!)

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

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

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

3 голосов
/ 19 октября 2010

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

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

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

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

3 голосов
/ 19 октября 2010

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

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

Может стоить дополнительного шага.

Дайте нам знать, на что вы пойдете.

1 голос
/ 25 января 2011

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

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

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

1 голос
/ 19 октября 2010

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

http://samy.pl/evercookie/

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

1 голос
/ 19 октября 2010

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

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

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

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

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

...