Créer des mots de passe pour votre application
Souvenez-vous de vos premiers mots passe : "musique", "jaguar", "Nicolas" ? Ne souriez pas, c'est toujours d'actualité, vous connaissez sûrement des collègues dans votre entourage qui utilisent toujours ce genre de passwords. A ce sujet, il existe un nombre important de consignes à ce sujet sur net, comme, par exemple :
www-chimie.u-strasbg.fr/membres/GB/Bon_MdP.html
Mais comment obliger l'utilisateur à suivre ces conseils ? Il n'a pas le temps pour lire et comprendre (s'il arrive) ce discours. "Fabriquer les mot de passe de façon aléatoire !" - diriez vous. Mais que va faire l'utilisateur qui reçoit un nouveau mot de passe "Kj78n,77p" ? Oui, il va l'écrire sur un papier ou dans son agenda électronique et va vous maudire en douceur avant chaque connexion. C'est déjà pas facile de le faire venir sur le site, on va pas non plus lui rendre difficile la tâche d'y rester.
Pour la recherche d'accès, un pirate peut utiliser une méthode de tests de toutes les combinaisons possibles d'une suite de caractères ou de recourir à un dictionnaire de mots. (je n'évoque pas d'autres types d'attaques applicatives dont la responsabilité est sur nous, les techniciens). La première méthode est facilement contrée par une définition de longueur minimale de mot de passe, la deuxième est un peu plus dure à appliquer.
Et si nous profitions des dictionnaires des hackers pour effectuer la vérification du mot de passe avant de l'accepter ? Renversons la vapeur en utilisant les dictionnaires non pas pour vérifier la stabilité des comptes utilisateurs mais lors de création de nouveau compte ? C'est une idée que nous avons implémenté sur notre site web il y a quelque temps et cela donne des résultats. Nous n'avons plus de mots de passes simples, mais pas des combinaisons de lettres et de chiffres impossibles non plus.
Ce qui a été le plus dur ce n'est pas le code vbscript de vérification, mais la constitution d'une base de données de plus de 3 millions entrées. Mots anglais, français, italiens, russes, combinaisons de chiffres et lettres tout est présent dans cette base de données.
Voici le code asp pour la vérification :
<% dim AdoDicoWordsPath, AdoDicoUser, AdoDicoUserPwd AdoDicoWordsPath = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=E:\db\dico_words.mdb" AdoDicoUser = "User" AdoDicoUserPwd = ""
' Vérification de présence de mot demandé dans le dictionnaire des mots function FindPwd(strPwd) if strPwd="" or isnull(strPwd) then FindPwd = true else ' Create objects Set objConnectionDico = Server.CreateObject("ADODB.Connection") objConnectionDico.Open AdoDicoWordsPath, User, UserPwd Set objRecordsetDico = Server.Createobject("ADODB.Recordset")
tSqlString = "SELECT words.Word " & _ "FROM words " & _ "WHERE words.Word='"& replace(strPwd, "'", "''") & "'" objRecordsetDico.Open tSqlString, objConnectionDico, 0, 1, &H0001 FindPwd = not (objRecordsetDico.EOF)
objRecordsetDico.Close objConnectionDico.Close set objRecordsetDico = nothing set objConnectionDico = nothing end if end function
' test Response.Write "kuku - " & FindPwd("kuku") & "<br>" Response.Write "test49 - " & FindPwd("test49") %>
|
La base de données est disponible à l'adresse suivante :
www.fw-application.com/docs/dico_words.zip (40 Mo)
Si votre site ne peut pas héberger une base de données de cette taille, mais que vous voulez bénéficier de cette vérification, nous avons mis en œuvre un mécanisme suivant de vérification :
Dans votre application web, construisez une requête url suivante :
http://www.fw-application.com/gen_06.asp?mdp=<@word to verify@>&surl=<@your web site success url@>&eurl=<@your web site error url@>
où :
- <@word to verify@> est le mot à vérifier
- le texte <@your web site success url@> est remplacé par l'url de page de succes sur votre site (où vous pouvez continuer l'enregistrement de l'utilisateur)
- le texte <@your web site error url@> est remplacé par l'url de page d'erreur (avec une invitation d'essayer un autre mot de passe)
Vous pouvez inclure d'autres paramètres d'url (nom d'utilisateur, prénom ...), ils seront redirigés aux deux pages.
Exemple :
http://www.fw-application.com/gen_06.asp?mdp=kuku&uname=Dimitri&ulng=ru&surl= http%3A%2F%2Fwww.fw-application.com%2Fhome.asp&eurl=http%3A%2F%2Fwww.fw-application.com%2Ferr_access.asp
Vous pouvez utiliser un formulaire avec la méthode Get et champs masqués : mdp, surl, eurl pour fabriquer cette url.
Ah oui, j'ai failli oublier. Il est impératif d'enrichir ce dictionnaire avec des combinaisons de lettres et chiffres provenant du contexte de votre société:
noms, prénoms, pays, ville, rue, station de métro
années de naissance, téléphone fixes et portables
Utilisez pour cela des générateurs de dictionnaires disponibles sur le net (je ne peux pas en conseiller car je n'ai trouvé aucun qui me satisfaisait pleinement dans les options de générations de combinaisons)
Bon code et à la prochaine,
Dimitri ACHIKHMIN
Ingénieur produit FWA
Racine