Prévention des inscriptions multiples

Eléphanteau du PHP | 44 Messages

19 août 2009, 18:00

Bonjour à tous,

Je bosse sur un projet que l'on pourrait vaguement (du moins pour clarifier mon problème) comparer à eBay.

En quelques mots, les utilisateurs peuvent poster une annonce et d'autres peuvent y répondre. Le "gagnant" d'une annonce et la personne qui l'a déposé peuvent ensuite s'évaluer. Jusqu'ici pas de problèmes, si ce n'est quand on considère que la plateforme sera gratuite, du moins à ses débuts.

Ma question est donc la suivante : comment empêcher un utilisateur X de s'inscrire 3-4 fois et de gagner ses propres annonces afin de s'autoévaluer?

J'ai plusieurs solutions en tête, mais aucune ne me parait vraiment fiable :
  • bien sur, l'inscription demande un email unique, mais n'importe qui est en mesure d'avoir 2, 3 voir des centaines d'adresses.
  • l'activation de compte par SMS est une possibilité. Encore une fois, il n'est pas impossible d'avoir plusieurs numéros de portable. D'autre part certains n'ont toujours pas de mobile (bon ça se fait rare, mais quand même). Sans parler du coût de l'envoi des SMS.
  • Demander aux inscrits d'envoyer une copie de la carte d'identité et d'une facture EDF ou autre... Là autant la solution est relativement fiable, autant le travail qui en découle devient quelque peu gênant tant pour le client que pour l'équipe derrière la plateforme.
  • La vérification par IP même si elle peut en freiner certains, n'arrêtera pas quelqu'un qui a des notions basiques en informatique.
  • Attribuer plusieurs statuts de "vérification" du compte aux utilisateurs en fonction des démarches proposées plus haut et construire une sorte d'algorithme qui permet de "flagger" les comptes suspects. Encore une fois, même si cela peut aider, je ne pense pas que ce soit une solution viable.
Une fois que la plateforme sera payante, le problème s'effacera quasiment de lui même. Mais en attendant, j'aimerai avoir vos idées sur d'éventuelles solutions qui ne découragent pas le nouvel arrivant de s'inscrire.

En vous remerciant,

Mammouth du PHP | 2937 Messages

19 août 2009, 23:14

Lors de la création de la bases de données, dans la table prévue pour le stockage des données liées aux utilisateurs, il faut ajouter une clé unique à une ou plusieurs colonnes contenant une donnée sensée être unique, par exemple la colonne qui stocke les adresses e-mail ou la colonne qui stocke les identifiants de connexion.

Cette clé unique s'appelle UNIQUE dans MySQL et SQLite et s'implémente comme suit :

Code : Tout sélectionner

-- Lors de la création d'une table CREATE TABLE utilisateurs ( identifiant VARCHAR(255), email VARCHAR(255), -- d'autres colonnes à définir UNIQUE (identifiant), UNIQUE (email) ); -- Lors de la modification d'une table (non valable pour SQLite) ALTER TABLE utilisateurs ADD UNIQUE (identifiant), ADD UNIQUE (email);
Avec les clés uniques, toute insertion de données dans une colonne comportant déjà les données en question n'aboutit pas (à moins qu'on n'effectue une requête de type INSERT IGNORE).

Un peu de lecture illustrant ces propos :

Eléphanteau du PHP | 44 Messages

19 août 2009, 23:30

Merci pour ta réponse Victor, mais je ne vois pas le rapport direct avec ma question.

J'utilise déjà une validation des formulaires via JavaScript, ensuite PHP et ensuite MySQL pour empêcher une personne de s'enregistrer plusieurs fois avec le même pseudo/email. Là n'est pas le problème, puisque cela n'empêche en rien un "malin" de s'inscrire 2, 3 fois avec plusieurs pseudos différents en utilisant une multitude d'emails différents.

Mon but est d'empêcher une personne physique de s'inscrire plusieurs fois ou du moins de m'approcher de ce but.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 août 2009, 23:43

En fait, ce que tu demandes est un combat sans fin.

Sur une note humoristique, j'ai envie de te dire que le seul moyen de ne pas permettre aux gens de s'inscrire 2 fois est de ne pas permettre aux membre de s'inscrire. :lol:

Sur une note plus sérieuse, tu n'auras jamais de système incontournable, ou alors pas longtemps.
Je pense que la solution la plus viable est un savant mélange de tout ce que tu proposes :
- un système d'unicité des emails / login
- un système qui met en attente les évaluations qui viennent des mêmes IP pour une modération a postériori
- un système de suppression des évalutations douteuse.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5924 Messages

20 août 2009, 00:04

Tu peux tracker aussi via des cookies. On peut penser à se déconnecter mais on peut ne pas penser nécessairement à vider ses cookies, donc cela pourrait ajouter un nouvel outil de tracking.

Eléphanteau du PHP | 44 Messages

20 août 2009, 00:34

Merci pour vos réponses les gars.
Sur une note humoristique, j'ai envie de te dire que le seul moyen de ne pas permettre aux gens de s'inscrire 2 fois est de ne pas permettre aux membre de s'inscrire.
Effectivement c'est un peu ce que je me dis aussi..

Le problème avec les cookies, c'est que je ne souhaite pas empêcher deux personnes de se connecter/créer un compte l'une après l'autre sur un même poste.

Bon je pense que je vais essayer de mixer un peu de tout. C'est un vrai casse tête ce truc.

Tiens, pour ceux qui lisent l'anglais, en v'la un qui a idée marrante. Un test de mémoire durant environ 12 minutes -> http://www.cs.duke.edu/~conitzer/memorytestAMEC08.pdf

ViPHP
ViPHP | 5924 Messages

20 août 2009, 01:24

Le problème avec les cookies, c'est que je ne souhaite pas empêcher deux personnes de se connecter/créer un compte l'une après l'autre sur un même poste.
On a dit tracker, pas interdire.
Deux personnes qui se connectent sur un même poste et qui s'achètent mutuellement des objets, c'est un peu grillé, non ?

ViPHP
ViPHP | 3607 Messages

20 août 2009, 09:56

Tu parlais d'ebay pour la comparaison...
Ils ont un moyen radical de "vérfier" un membre, c'est le coup du virement (ou prélèvement je sais plus) de 1€, contenant un code de validation...
Après c'est lourd à mettre en place... :|

Une solution, c'est d'avoir tes membres séparé en deux catégories, les "vérifiés" et les autres...
Les vérifiés ne sont pas modéré (ou le sont à postériori) et les autres sont modérés à tout les coups...
Pour "vérifier" un membre, tu peux par exemple appeler les personnes, vérifier des numéros de siret pour des entreprises, des adresses pour des particulier, etc, etc...
Tu peux même envoyer un courrier (un vrai en papier) avec un code à l'intèrieur, permettant de valider leur statut...
Bien sûr ça peut/doit être payant si les moyens mis en oeuvre prennent du temps ou de l'argent...

Eléphant du PHP | 51 Messages

27 août 2009, 15:57

J'ai solutionné ce problème difficile sur un site.

Pour s'inscrire, il faut passer par la case Paypal et payer 5 euros. Cela me permet d'éviter les rigolos, d'empecher le spam, d'identifier formellement les visiteurs alors qu'une adresse mail est anonyme, et aussi d'éviter les doubles inscriptions (enfin, sauf à avoir 2 comptes Paypal, mais c'est difficile).

Si je devais le refaire, je referais pareil, c'est très simple à mettre en place et 100% efficace. Seul problème, ce site payant a très peu de succès, parce que les internautes sont habitués à ce que tout soit gratuit.Mais faut savoir ce que l'on veut. Je pense par ailleurs que le tout gratuit n'est pas durable...

Mammouth du PHP | 2937 Messages

27 août 2009, 16:08

J'ai solutionné ce problème difficile sur un site.

Pour s'inscrire, il faut passer par la case Paypal et payer 5 euros. Cela me permet d'éviter les rigolos, d'empecher le spam, d'identifier formellement les visiteurs alors qu'une adresse mail est anonyme, et aussi d'éviter les doubles inscriptions (enfin, sauf à avoir 2 comptes Paypal, mais c'est difficile).

Si je devais le refaire, je referais pareil, c'est très simple à mettre en place et 100% efficace. Seul problème, ce site payant a très peu de succès, parce que les internautes sont habitués à ce que tout soit gratuit.Mais faut savoir ce que l'on veut. Je pense par ailleurs que le tout gratuit n'est pas durable...
Je ne parierais pas ma chemise que le tout-gratuit n'est pas durable. ;) D'ailleurs, comme tu donnes à l'entendre toi-même, tant que tu utiliseras une solution payante, le succès risque de tarder longtemps et l'efficacité peut diminuer à long terme (et si jamais un spammeur fortuné accepte de passer par la case Paypal ? #-o ).