Остановка пользователей, голосующих несколько раз на сайте - PullRequest
26 голосов
/ 21 февраля 2009

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

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

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

Ответы [ 15 ]

22 голосов
/ 21 февраля 2009

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

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

Мне пришлось провести некоторые экстренные проверки: IP-адрес, файлы cookie, и я действительно не помню, что еще.

В конце дня мы решили провести опросы. Эти чертовы роботы просто не заботились. IP-адреса были подделаны, куки были удалены и т. Д.

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

И печально то, что это был просто развлекательный сайт с опросами о том, какой ваш любимый цвет и тому подобное.

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

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

7 голосов
/ 21 февраля 2009

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

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

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

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

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

6 голосов
/ 21 февраля 2009

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

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

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

Даже регистрация пользователя на самом деле не помогает сама по себе - они могут просто зарегистрировать другую учетную запись.

4 голосов
/ 21 февраля 2009

Интересно, не могли бы вы сделать это многошаговым процессом, чтобы сделать его более трудным для БОТов?

За регистрацию или аналогичное задание вы получаете Cookie-A, а затем, когда вы голосуете, вы получаете Cookie-B, но если у вас есть Cookie-B и у вас нет подходящего подходящего Cookie-A, ваш голос не сосчитать. Если вы попытаетесь повторно зарегистрироваться на том же компьютере, который может быть обнаружен у вас уже есть Cookie-A. Слишком быстрое выполнение шагов рассматривается как БОТ.

У нас был психометрический тест со многими вопросами, и пользователям приходилось вдумчиво отвечать. Ответ через N секунд был, когда кто-то просто нажимал кнопки, чтобы пройти через это. Мы никогда не говорили им, что их ответ был слишком быстрым, мы просто отметили данные как «подозрительные».

Так что любой, кто пытается перейти прямо к кнопке голосования, не будет работать. Им нужно будет выполнить Шаг-A, затем Шаг-b, затем Шаг-C по порядку.

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

Может помочь требование включения JavaScript, как и системы Captcha. У капчи может быть какая-то задержка: «Пожалуйста, следите за появлением двух слов», чтобы два слова показывались одно за другим, но «настоящие слова», чтобы их можно было легко запомнить, а затем ввести. Любой ответ, который «слишком быстро» недопустимо.

В какой-то момент люди будут просто раздражаться и не беспокоиться.

3 голосов
/ 07 сентября 2009

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

Это не сработало. Люди создали сотни ложных адресов электронной почты на различных бесплатных сайтах.

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

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

3 голосов
/ 14 марта 2009

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

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

Джефф Этвуд написал статью о «входном барьере» , которая может дать вам подсказки.

1 голос
/ 29 сентября 2011

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

0 голосов
/ 06 января 2016

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

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

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

Еще лучше, если вы отправите код подтверждения в SMS. Хотя люди могут иметь несколько телефонных номеров, нередко иметь большое количество телефонных номеров для совершения мошенничества. Но этот подход стоит денег для вас и может быть использован DoSing сервером для исчерпания всех SMS.

Если вы хотите получить правительственные опросы, где голоса могут решить выборы. Затем вам следует попросить избирателей явиться в регистрационный офис, чтобы подать заявку на опрос, и позволить им выбрать один из подготовленных конвертов с ПИН-кодом, который содержит длинный хэш, который можно ввести при голосовании. Так что, если организаторы не совершат мошенничество, избиратели не смогут. Это также гарантирует анонимность.

0 голосов
/ 15 октября 2015

Я знаю, что это старая тема. В любом случае я предлагаю использовать evercookie (http://samy.pl/evercookie/), чтобы отследить пользователя, который уже проголосовал!

0 голосов
/ 24 февраля 2009

Также возможна:

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

Но в этом случае у пользователя также есть некоторые накладные расходы.

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

...