6 votes

Concevoir un système de vote Django sans utiliser de comptes

Nous envisageons de mettre en place un système de vote (votes vers le haut, vers le bas) sans utiliser aucun type d'identifiant - pas de compte d'application ni d'OpenID ou quoi que ce soit de ce genre.

Les préoccupations dans l'ordre :

  1. Empêcher les votes robotisés
  2. Permettre aux individus sous un TAN de voter sans annuler/invalider le vote de quelqu'un d'autre
  3. Empêcher (ou, à tout le moins, rendre très difficile) les utilisateurs de voter plus d'une fois

Mes questions :

  1. Si vous avez mis en œuvre quelque chose de similaire, avez-vous des conseils à donner ?
  2. Y a-t-il des problèmes que j'ai peut-être oubliés ?
  3. Y a-t-il des outils que je devrais envisager ?

Si vous avez des questions qui vous aideraient à trouver une réponse à l'une de ces questions, n'hésitez pas à les poser dans les commentaires !

4voto

danny Points 2080

Pour répondre à vos préoccupations :

1 : un simple Captcha ferait probablement l'affaire, si vous googlez "django captcha", il y a un tas de plugins. Je ne les ai jamais utilisés moi-même, donc je ne peux pas dire lequel est le meilleur.

2 & 3 : L'utilisation des sessions de Django résout ces deux problèmes - vous pourriez ainsi enregistrer un cookie dans le navigateur de l'utilisateur pour indiquer que la personne a déjà voté. Cela permet évidemment aux gens de voter via différents navigateurs ou en vidant leur cache, donc cela dépend de l'importance qu'il y a à ce que les gens ne soient pas autorisés à voter deux fois. J'imagine que seul un faible pourcentage de personnes penserait à vider leur mémoire cache. Pour autant que je sache, le seul autre moyen de limiter le nombre d'utilisateurs sans procédure de connexion serait de tester les adresses IP, mais cela irait à l'encontre de votre deuxième critère puisque les personnes se trouvant sur le même réseau apparaîtraient comme ayant la même adresse IP.

Si vous ne voulez pas que les votes multiples soient aussi simples que la suppression des cookies du navigateur, vous pouvez également autoriser les connexions à Facebook ou Twitter - le plugin django-socialregistration est assez bien documenté et simple à mettre en œuvre.

J'espère que cela vous aidera !

0voto

Jim McGaw Points 417

Recaptcha est un excellent choix. Pour Django, voici celui avec lequel j'ai eu le plus de succès, qui utilise en fait des images chargées depuis Recaptcha (par opposition aux images locales générées à la volée) :

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

Les instructions d'installation se trouvent dans cet extrait :

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

Si Recaptcha est un peu lourd pour ce que vous faites, j'ai entendu parler de personnes qui mettent en œuvre un formulaire qui se charge avec une entrée cachée contenant une valeur d'horodatage, correspondant au moment où le formulaire a été chargé. Ensuite, lorsque le formulaire est soumis, il génère un nouvel horodatage et obtient la différence entre les deux. Si la différence en secondes est inférieure à un certain seuil déraisonnable pour un visiteur humain, il y a de fortes chances qu'il s'agisse d'un robot. Cette méthode fonctionne pour les formulaires de contact comportant plusieurs champs... il faut généralement plus de 10 secondes à une personne pour les remplir.

Je ne peux pas me prononcer sur l'efficacité de cette technique en production....es robots spammeurs sont aujourd'hui plus intelligents que moi. Mais c'est peut-être quelque chose que vous pourriez envisager d'examiner ou de tester.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X