Hachage et vérification des mots de passe pour la connexion des utilisateurs Web

Traduit automatiquement de Deepl

Lasécurité devient un sujet de plus en plus important, car les applications professionnelles sont de plus en plus souvent accessibles via le Web et sont, par conséquent, plus vulnérables aux menaces. Comme 4D est très attentif aux questions de sécurité, nous vous proposons dans 4D v16 R5 quelques améliorations en matière de sécurité, dont l’une concerne la protection des mots de passe des utilisateurs Web par hachage de mot de passe.

D’ailleurs, si vous voulez en savoir plus sur la façon dont 4D vous aide à protéger vos données et la sécurité en général, je vous recommande de consulter cet article de blog.

Pourquoi les mots de passe doivent-ils être hachés ?

Prenons un exemple concret : vous avez une application d’entreprise, avec des utilisateurs qui peuvent se connecter en saisissant leur nom et leur mot de passe dans une boîte de dialogue. Une fois connectés, les utilisateurs obtiennent des « droits supplémentaires » tels que la lecture et l’écriture dans d’autres tables ou champs (par exemple, le département des ressources humaines peut accéder à la table des salaires des employés mais pas aux employés eux-mêmes).

Le serveur doit alors stocker « quelque chose » qui peut être utilisé pour vérifier les mots de passe des utilisateurs. Le « quelque chose » le plus élémentaire est constitué par les mots de passe eux-mêmes. Tout mot de passe non sécurisé enregistré dans votre base de données pourrait être volé et utilisé pour compromettre votre application et vos données. Si vous hachurez les mots de passe de vos utilisateurs avant de les enregistrer dans votre base de données, le mot de passe original ne pourra pas être retrouvé ou décrypté. Mais vous pouvez toujours comparer le hachage au mot de passe original pour en vérifier la validité.

Hachage ou chiffrement ?

La première chose à noter est que de nombreuses personnes parlent de mots de passe cryptés mais veulent en réalité parler de mots de passe hachés.

Le cryptage utilise un algorithme pour coder les données qui peuvent être décryptées par une clé pour récupérer les données originales. Dans le cas du hachage, une fois que les données sont codées, il n’y a aucun moyen de récupérer les données originales. Ainsi, les mots de passe devraient être hachés et non pas cryptés.

Une conséquence du hachage des mots de passe est que, puisque vous ne stockez pas les mots de passe eux-mêmes (mais seulement un élément de données suffisant pour vérifier un mot de passe sans pouvoir le récupérer), vous ne pouvez pas renvoyer leurs mots de passe aux utilisateurs qui les ont oubliés. Au lieu de cela, vous devez sélectionner un nouveau mot de passe aléatoire pour eux, ou les laisser choisir un nouveau mot de passe.

Quel algorithme pour le hachage ?

Les algorithmes comme MD5 ou SHA sont très rapides mais ils sont vulnérables aux attaques par force brute, par conséquent ils ne doivent pas être utilisés pour hacher les mots de passe. L’algorithme bcrypt est lent par conception, il vise à être lent, il est donc parfait pour le hachage de mots de passe. Pour plus d’informations, je vous conseille de lire l’article « Comment stocker un mot de passe en toute sécurité » de Coda Hale.

Commandes pour hacher les mots de passe

Deux nouvelles commandes ont été créées pour générer et vérifier un mot de passe haché. Ces commandes sont basées sur l’algorithme bcrypt.

  • Un nouvel utilisateur crée son compte avec le mot de passe :« myPassword« . Je génère le mot de passe de hachage avec la commande new Generate password hash puis j’ai sauvegardé le mot de passe haché dans la base de données.

$varHash:=Generate password hash("myPassword")
[User]Login:=$varLogin
[User]HashPassword:=$varHash
SAVE RECORD ([User])

  • Lorsque mon utilisateur essaie de se connecter, il entre son mot de passe. Puis je vérifie la validité entre le mot de passe entré par l’utilisateur et le mot de passe de hachage stocké dans la base de données avec la commande new Verify password hash commande.

C_TEXT($varLogin;$varPassword) // information entered by user
QUERY ([Utilisateur] ; [Utilisateur]Login;= ;$varLogin)
If (Records in selection([Utilisateur])=1)

// Compare the password to the hash password
If (Verify password hash($varPassword; [Utilisateur]HashPassword))
SendToUser("Vous êtes connecté. Bienvenue "+$varLogin+".")
Else
SendToUser("Vous avez saisi un mauvais mot de passe.")
End if

Else
SendToUser("Vous avez saisi un mauvais login.")
End if

Vanessa Talbot
- Product Owner -Vanessa Talbot a rejoint l'équipe du programme 4D en juin 2014. En tant que Product Owner, elle est chargée de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation des fonctionnalités livrées répond aux besoins des clients.Depuis son arrivée, elle a travaillé à la définition des fonctionnalités clés de 4D. Elle a travaillé sur la plupart des nouvelles fonctionnalités de multithreading préemptif et aussi sur un sujet très complexe : la nouvelle architecture pour les applications enginées. Vanessa est diplômée de Telecom Saint-Etienne. Elle a commencé sa carrière à l'Institut de Recherche Criminelle en tant que développeur pour le département audiovisuel. Elle a également travaillé dans les domaines des médias et du médical en tant qu'experte en support technique, en production ainsi qu'en documentation de nouvelles fonctionnalités.