Question

Lors de la signature pour les nouveaux comptes, des applications web demandent souvent la réponse à une « question de sécurité », à savoir le nom du chien, etc.

Je voudrais passer par notre base de données et rechercher des cas où les utilisateurs du clavier juste en purée au lieu de fournir une réponse légitime -. C'est un indicateur élevé d'un compte abusif / frauduleuse

« nom de jeune fille de la mère? » lakdsjflkaj

Des suggestions quant à la façon dont je devrais prendre?

Remarque: Je ne suis pas seulement en utilisant des expressions régulières sur ces 'réponses aux questions de sécurité'

Les 'réponses' peuvent être:

  1. sélectionné à partir d'un db en utilisant quelques regexes SQL de base

  2. Analysé autant de fois que l'utilisation de regexes python nécessaires

  3. Par rapport / élagué / marqué au besoin

Ceci est une question technique, non philosophique ; -)

Merci!

Était-ce utile?

La solution

Vous êtes probablement mieux analyser la distribution n-grammes, semblable à la détection de la langue.

Cette de code est un exemple de détection de langue à l'aide trigrammes. Ma conjecture est le clavier Smashing trigrammes sont assez uniques et ne semblent pas en langage normal.

Autres conseils

Je ne ferais pas cela - à mon avis, ces questions fragilisent la sécurité, donc en tant qu'utilisateur, j'essaie toujours de fournir une autre semi-mot de passe comme une réponse - pour vous, il aimerait MASHED. Eh bien, il est en purée, mais qui est exactement ce que je veux faire.

BTW. Je ne suis pas sûr du fait, que vous pouvez interroger les réponses. Comme ils surmonter votre protection par mot de passe, ils doivent être traités comme des mots de passe = stocké sous forme d'un hachage!

Edit: Quand je lis cet article je me souvenais instantanément cette question; -)

L'approche globale des questions de sécurité est tout à fait erronée.

Je l'ai toujours trouvé les gens mettent des réponses de sécurité plus faibles que les mots de passe qu'ils utilisent .
Les questions de sécurité ne sont qu'un maillon de plus dans une chaîne de sécurité - le lien plus faible!

OMI, une meilleure façon d'aller serait de permettent à l'utilisateur de demander un nouveau mot de passe envoyé à leur id e-mail enregistré . Cela présente deux avantages.

  1. la tentative force brute doit localiser et briser le service de courrier électronique d'abord (et, vous ne serez jamais les aider là - garder l'identifiant e-mail d'inscription très protégé)
    • l'utilisateur de votre service sera toujours obtenir une indication lorsque quelqu'un tente une force brute (ils reçoivent un message disant qu'ils ont essayé de régénérer leur mot de passe)

Si vous devez avoir des questions secrètes, les laisser déclencher une nouvelle générée (envoyer jamais le mot de passe de l'utilisateur, régénèrent temporaire, de préférence un temps forcé) l'envoi de mot de passe à l'ID e-mail ils ont enregistré avec - et, faire ne pas montrer du tout.

Une autre astuce consiste à faire de la question secrète id e leur LUI-MÊME-courrier recommandé .
S'ils l'ont mis à droite, vous envoyez un re généré mot de passe temporaire à cet identifiant e-mail.

Il n'y a aucun moyen de le faire avec une expression régulière. En fait, je ne peux pas penser à une façon raisonnable de le faire du tout - où iriez-vous tracer la ligne entre les suspects et soupçonneux? I, pour une fois, répondre souvent aux questions de sécurité avec une réponse obscurcie. Après tout, le nom de jeune fille de ma mère n'est pas la chose la plus difficile à trouver.

Si vous pouvez trouver une liste de probabilités paires de lettres en anglais, vous pouvez construire une probabilité approximative pour le mot ne pas être un « vrai » mot anglais, en utilisant les moins paires et les paires possibles qui ne sont pas dans la liste. Malheureusement, si vous avez des noms ou d'autres « non-mots » vous ne pouvez pas les forcer à être des mots anglais.

Peut-être que vous pouvez vérifier une abondance de consonnes. Ainsi, par exemple, dans votre exemple lakdsjflkaj il y a 2 voyelles (a) et 9 consonnes. En général, la probabilité de toucher une voyelle en appuyant sur les touches au hasard est beaucoup plus faible que celui de toucher une consonne.

Dejunk est une bibliothèque Ruby à partir de laquelle vous pouvez inspirer. Il met en œuvre quelques-unes des suggestions d'autres réponses. Elle considère entrée à clavier empâtage si l'entrée:

  • Contient caractères bigrams qui sont peu susceptibles d'apparaître dans le texte réel, mais qui sont proches sur un clavier. (La bibliothèque comprend une liste de ces bigrams.)
  • Commence par un signe de ponctuation inattendu.
  • a trop de mots très courts.
  • A pas de voyelles.
  • a des caractères qui sont répétés un nombre excessif de fois.

Vous pouvez vérifier une lettre majuscule au début .... que vous obtiendrez des faux positifs pour vous.

Un rapide Google m'a donné cette , vous pouvez comparer chacun contre un nom dans cette liste .

De toute évidence ne fonctionne que pour la question de sécurité que vous avez dit.

Avez-vous aussi vu ceci:

Anatomie de l'attaque twitter

Je vais réfléchir la prochaine fois que je mets en œuvre une question de sécurité.

Si votre question est toujours quelque chose lié à un réel nom humain, cela est impossible. Tenez compte des noms asiatiques typés avec des caractères romains; ils peuvent très bien ce que le filtre que vous trébucher venez avec, mais sont encore tout à fait légitime.

Vous pouvez rechercher des modèles qui ne font pas de sens phonétiquement. Tels que:

'q' non suivie d'un 'U'.

asdf

qwer

zxcv

asdlasd

En gros, essayez écraser sur votre clavier, voyez ce que vous obtenez, et branchez que dans votre filtre. également brancher diverses règles grammaticales. Cependant, comme il est des noms que vous traitez, vous aurez toujours « ce gars-là » avec le nom bizarre qui provoque un faux positif.

Au lieu d'expressions régulières, pourquoi ne pas simplement comparer avec une liste de bonnes valeurs connues? Par exemple, comparer le nom de jeune fille de la mère avec les données de recensement, ou le nom d'animal de compagnie avec l'une des listes de noms d'animaux que vous pouvez trouver en ligne. Pour une version plus simple de cela, juste faire une recherche Google pour tout ce qui est entré. Les noms légitimes devraient avoir beaucoup de résultats, tandis que le clavier empâtage devrait donner lieu à très peu le cas échéant.

Comme toute autre méthode, vous aurez toujours besoin de gérer les faux positifs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top