Ou comment gaspiller du temps    —  xLaNT

Discussions

Lutter contre les comptes fantômes ?

Guybrush 8450 Bob
Bonjour,

Assez curieusement, dans la v3, on avait très peu d'inscription de la part de "robots". Je ne sais pas pourquoi, j'avais en tête que c'était la validation par e-mail qui constituait un frein pour ce genre de "spam". Dans la v4, la validation par e-mail est toujours présente (et renforcée, d'ailleurs) mais... en à peine 2 semaines, j'ai déjà 8 comptes fantômes créés, dont 5 sont visibles et actifs ! Je les ai virés manuellement, mais... qu'ils sont chiants, quoi ! :-D

Je ne savais pas que des gens s'emmerdaient à concevoir des robots capables de parser des e-mails pour valider l'inscription. Ce n'est pas trop gênant, tant que ça ne spamme pas sur le site, mais j'aimerai éviter la création de comptes fantômes, et surtout, j'imagine que passer de "Je suis un robot et je suis inscrit" à "Je flood le site avec du porn", ça ne sera qu'une question de jours !

Avez-vous des mécanismes simples à mettre en place pour lutter contre ce genre de choses ? J'aimerai autant que possible éviter l'usage de captcha... mais à la rigueur, lors de l'inscription, cela ne me dérange pas trop d'en ajouter un... mais je préfère investiguer, je n'ai actuellement aucune idée de comment intégrer cela (mais je suppose que je suis loin d'être le seul à m'être posé la question et que l'ami Google va rapidement m'informer des solutions :-D)
PetitCalgon 2672 Bob
Une simple addition / soustraction textuelle à résoudre à l'inscription ?
- un plus trois
- quatre moins deux
- cinq plus un
- etc.
Guybrush 8450 Bob
Pourquoi pas !

Il faut que je fasse en sorte que l'information soit "statique", dans le sens où je veux inclure cela dans le processus de validation du formulaire (qui ne peut pas dépendre de la requête, donc rien en terme de cookies, sessions, etc.), mais en même temps, je ne veux pas qu'une fois le formulaire validé, il soit possible de systématiquement "dupliquer" les éventuels champs cachés pour réussir l'inscription.

Peut-être qu'une première approche pourrait être tout simplement de prévoir un champ hidden qui me servirait de timeout ? (édité : en complément, bien entendu, d'un captcha-like comme Anca suggère)


Ce message a été modifié 1 fois. Dernière modification : 10 mars 2014 à 15:25 par Guybrush.

Guybrush 8450 Bob
Bon... J'ai fureté un peu sur le net pour voir les solutions proposées. Je suis vraiment dans l'optique où je souhaite n'ajouter aucune contrainte à l'utilisateur (donc pas de captcha image, et si possible, rien ^^). La première solution qui semble moyennement efficace a été retenue : un champ supplémentaire, de type text, caché via du CSS et qui doit rester vide. L'utilisateur ne risque donc pas de le compléter par erreur, alors qu'un robot va probablement vouloir le compléter pour espérer faire valider le formulaire.

Si cela s'avère insuffisant, la seconde approche consiste à remplir ce champ avec une valeur fixée via JS. Les robots ayant rarement un support pour interpréter une page, il est probable que le JS ne s'exécute pas.

Et si cela s'avère encore insuffisant, le JS sera déclenché par un "keyUp" sur un des champs précédents, ou un "hover" sur le bouton submit, ou que-sais-je encore qu'un robot ne simulera pas :-D Na ! :-p

[Edité : en tout cas, depuis la modification effectuée, hier vers 21h, aucun compte fantôme alors que j'en comptais 1 voire 2 par heure minimum en soirée, ça s'était vraiment accéléré sur les dernières heures]


Ce message a été modifié 1 fois. Dernière modification : 11 mars 2014 à 10:13 par Guybrush.

Fabe 611 Geek
D'expérience, la plupart des robots actuels intègrent le support du CSS et du Javascript pour détecter les subtilités du type champ caché en JS ou valeur générée (le déclenchement par événement UI, je sais pas).
La plupart parviennent même à déchiffrer les captchas, ceux-ci ayant un "dictionnaire" de lettre constant qu'il est possible d'identifier.

Seul le Recaptcha de Google ne fonctionne pas sur la base d'un dictionnaire et reste hors d'atteinte à la plupart des robots.
Guybrush 8450 Bob
Sur la v3, on n'avait pas ces soucis :'( Sans doute parce qu'il n'y avait pas de "submit" (c'était du JS) ?

Je n'aime pas les captcha, même si c'est juste pour s'inscrire... J'avais lu un article montrant que les outils automatiques présentaient de meilleures performances que les "humains" pour résoudre les captcha. Ce qui ne m'étonne pas, quand on voit la tête de certains humains captcha... :-D

Je dois donc m'attendre, vu ton retour, à ce que la solution mise en place ne fonctionne pas (ou très peu)... :-/
Tchou 3592 Bob
Sur ton site, tu as des URL plus parlantes que sur la version d'avant : tu as /board/, /registration/ , ...

Du coup, ton site a été détecté comme forum, et les scripts s'en donnent à cœur joie pour tester, il "suffit" de poster. Après, la question pour ces bots, c'est est-ce qu'ils chargent la page du form une fois puis remplissent "naturellement" avant de poster, ou est-ce un bête POST avec les valeurs qui vont bien. Si c'est le second, les solutions sont multiples : création d'un champ hidden dont la valeur doit correspondre, ou simplement vérifier que le referrer soit bien la page précédente.

Après, souvent ce type d'attaques provient d'un sous-réseau bien identifié. Je sais que j'ai déjà blacklisté des sous-réseaux entiers du côté de St Petersbourg, ça m'a résolu le soucis. Alors certes il y a une possibilité de faux positif, et ça ne résoud pas tout, mais si on parle d'un par heure, si tout provient d'une même IP ou d'un même sous-réseau, pas de pitié : ban IP !
Guybrush 8450 Bob
Je vais vérifier dans les logs que j'ai, mais je pense que ça provient à chaque fois de Russie et de Chine. Je n'ai rien contre eux, mais leur interdire l'accès complet au site pourrait être une solution (faudra bientôt étendre à l'Ukraine :-D).

Le seul formulaire accessible publiquement, autre que l'inscription, c'est celui des slogans, mais je n'ai aucun flood à partir de là (de toute façon, y a une pré-validation sur les slogans maintenant). Pour l'inscription, le champ caché fera effet quelque temps, le temps que les robots mettent à jour le formulaire. Je pense donc que c'est un formulaire "stocké" et qu'il ré-essaye en POST régulièrement. Une possibilité serait donc de faire en sorte que le champ caché porte un nom différent en fonction de la journée, par exemple, ou trimballe un numéro qui me sert vaguement de timestamp (j'imagine que si je mets un timestamp en dur dedans, ils vont le détecter).

Tchou 3592 Bob
Un cryptage du timestamp, m'étonnerais que ça se repère si facilement (dans l'optique de script, pas d'une attaque délibérée et réfléchie)... surtout si tu as salé en plus du timestamp. Et si le timestamp une fois decrypté date de plus d'une heure (certains s'endorment sur une fenetre) -> crac, message d'erreur.
Guybrush 8450 Bob
Je confirme ce que Fabe disait : les robots contournent bien l'usage du champ caché.
Vu le délai, cela signifie qu'il ne faut que quelques heures pour que le formulaire soit actualisé chez ces robots.

Je vais remplacer le champ "caché" par un vrai champ caché avec un timestamp de 15 minutes, en espérant que cela filtre au maximum les fausses inscriptions.

Je vais voir aussi si je ne peux pas modifier la fin du processus d'inscription : un "bête robot" scanne sans doute l'e-mail (sur hotmail et mail.ru pour l'instant ^^) à la recherche d'un lien qui peut servir pour la validation. Peut-être devrais-je d'abord commencer par ne donner que le lien vers la page finalisant l'inscription, page proposant un formulaire où il faut entrer manuellement la clé qui a été fournie dans l'e-mail (et, éventuellement, ajouter une petite question subliminale sur cette page ?).

Répondre

Vous devez être inscrit et identifié.