53 votes

Comment vérifier si une chaîne a l'air aléatoire, ou si elle est générée et prononçable?

Pour les fins de l'identification [possible] bot générés par les noms d'utilisateur.

Supposons que vous avez un nom d'utilisateur comme "bilbomoothof" .. il peut être absurde, mais il contient encore pronouncable sons et ainsi semble d'origine humaine.

J'accepte qu'il aurait pu être généré de façon aléatoire à partir d'un dictionnaire de syllabes, ou parties de mots, mais supposons un instant que le bot en question est un peu de la foutaise.

  1. Supposons que vous avez un nom d'utilisateur comme "sdfgbhm342r3f", à un homme, c'est clairement une chaîne de caractères aléatoires. Mais peut cet être identifié par programmation?
  2. Existe-il des algorithmes disponibles (similaire à Soundex, etc..) qui peuvent identifier prononce des sons à l'intérieur une chaîne comme celle-ci?

Des Solutions applicables en PHP/MySQL le plus apprécié.

16voto

Mac Points 4570

Je suppose que vous pourriez penser à quelque chose comme ça si vous pouviez vous limiter aux sons prononçables en anglais . Pour moi (je suis français), des mots comme szczepan ou wawrzyniec sont imprononçables et ont certainement un certain caractère aléatoire.

Mais ce sont en fait des prénoms polonais (signifiant steven et lawrence ) ...

8voto

Clement Herreman Points 5642

Je suis d'accord avec Mac. Mais plus que cela, les gens ont parfois du nom d'utilisateur qui ne sont pas pronouncable, comme qwerty ou rtfmorleave.

Pourquoi s'embêter avec ça ?

< obsolètes et le faux, mais je ne supprimez pas à cause de commentaires >

Mais plus que cela, pas de bots utilisent 'zetztzgsd" comme nom d'utilisateur, ils ont dictionnaire de nom réel, du possible, pseudo, etc. je pense donc que ce serait un gaspilleur de temps pour vous

< / obsolète et le faux, mais je ne supprimez pas à cause de commentaires>

8voto

Rafał Dowgird Points 16600

Recherchez l'analyse de n-grammes. Il est utilisé avec succès pour détecter automatiquement la langue du texte et fonctionne étonnamment bien, même sur des textes très courts.

La démonstration en ligne a reconnu "bilbomoothof" en anglais et "sdfgbhm342r3f" en népalais. Il retourne probablement toujours le meilleur match, même s'il est très pauvre. Je pense que vous pourriez l'entraîner à discerner entre «prononçable» et «aléatoire».

3voto

Adam Matan Points 15690

Utilisez simplement CAPTCHA comme une partie du processus d'inscription.

Vous ne pouvez jamais la distinction entre les vrais uesrnames de bot créé des noms d'utilisateur, sans sévèrement ennuyeux à vos utilisateurs.

Vous allez bloquer des utilisateurs avec bizzare, ou non noms anglais, qui va irriter, et les robots vont juste continuer à essayer jusqu'à ce qu'ils attraper un bon nom d'utilisateur (à partir du dictionnaire, ou d'autres sources - c'est un très joli!).

EDIT : à la Recherche pour la prévention plutôt que le fait de l'analyse?

La solution est de laisser quelqu'un d'autre gérer les identités pour vous. Par exemple, vous pouvez utiliser une petite liste de fournisseurs OpenID (comme SI), ou facebook connect, ou les deux. Vous saurez pour assurer que les utilisateurs sont réels, et qu'ils ont été de résoudre au moins un CAPTCHA.

EDIT: une Autre Idée

Recherche la chaîne de caractères dans Google, et de vérifier le nombre de correspondances trouvées. Ne devrait pas être votre seul outil, mais c'est un bon indicateur, trop. Randomisés chaînes, bien sûr, devrait avoir peu ou pas de matchs.

2voto

Artem Barger Points 18789

Réponse à la question n ° 1:

Malheureusement, cela ne peut pas être fait, car la complexité de Kolmogorov de la fonction n'est pas calculable, donc vous ne pouvez pas générer un tel algorithme, sauf si vous allez appliquer quelques règles d'domaine du possible les noms d'utilisateur, vous serez en mesure d'effectuer l'analyse heuristique et de décider, mais même alors, il est vraiment difficile à faire.

PS: Après avoir posté cette réponse, je l'ai croisé dans un certain nombre de services qui ont donné une idée de l'exemple pour le nom d'utilisateur de restriction de domaine, permettez aux utilisateurs d'utiliser la boîte mail du domaine public qu'ils ont des noms d'utilisateur.

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