|
Créer des mots de passe via ASP pour limiter les risques de piratage
"Vous mettez en œuvre un service avec un accès par
identification : partie privée de votre site, forums, abonnement aux articles
..... Vous identifiez vos utilisateurs par un login et un mot de passe. Si le
problème de login ne se pose pas, ça sera l'e-mail de l'utilisateur ou un nom
libre, le mot de passe doit répondre à un certain nombre de critères afin de
limiter les risques de piratage.
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 :
http://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
Source: asp-php.net
|