Разработка системы голосования Django без использования учетных записей - PullRequest
6 голосов
/ 18 февраля 2011

Мы рассматриваем возможность внедрения системы голосования («вверх», «вниз») без использования каких-либо учетных данных - ни учетных записей приложений, ни OpenID, ни чего-либо подобного.

Обеспокоенность по порядку:

  1. Предотвращение голосов роботов
  2. Разрешить лицам под NAT участвовать в голосовании без переопределения / аннулирования чужого голоса
  3. Запрет (или, по крайней мере, очень затруднительный) для пользователей голосовать большечем один раз

Мои вопросы:

  1. Если вы реализовали что-то подобное, есть какие-нибудь советы?
  2. Есть какие-либо опасения, которые, возможно, я пропускаю?
  3. Есть ли какие-либо инструменты, на которые мне, возможно, стоит обратить внимание?

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

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

Для решения ваших проблем:

1: простая капча, вероятно, сработает, если вы гуглите «django captcha», есть множество плагинов. Я никогда не использовал их сам, поэтому не могу сказать, какой из них лучший.

2 & 3: Использование сессий Django решает обе эти проблемы - с его помощью вы можете сохранить куки в браузере пользователя, чтобы указать, что человек уже проголосовал. Это, очевидно, позволяет людям голосовать через разные браузеры или очищать их кеш, поэтому все зависит от того, насколько важно, чтобы людям не разрешали голосовать дважды. Я бы предположил, что только небольшой процент людей на самом деле подумает попробовать очистить кеш. Насколько я знаю, единственным другим способом ограничения пользователей без процесса входа в систему будет проверка IP-адресов, но это нарушит ваши вторые критерии, поскольку люди в одной сети будут иметь один и тот же IP-адрес.

Если вы не хотите, чтобы несколько голосов были такими же простыми, как удаление файлов cookie браузера, вы также можете разрешить вход в Facebook или Twitter - плагин django-socialregistration довольно хорошо документирован и прост в реализации.

Надеюсь, это поможет!

0 голосов
/ 18 февраля 2011

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

http://pypi.python.org/pypi/recaptcha-client#downloads

Инструкции по установке находятся в этом фрагменте:

http://djangosnippets.org/snippets/433/

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

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

...