Разработка системы голосования Django без использования учетных записей

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

проблемы по порядку:

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

мой вопросы:

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

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

2 ответов


чтобы решить ваши проблемы:

1: Простая капча, вероятно, сделает трюк, если вы google "django captcha", есть куча плагинов. Я никогда не использовал их сам, поэтому не могу сказать, что лучше.

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

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

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


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

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

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

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

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

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