Crypter les mots de passe dans une base de données.
Comment crypter les mots de passe dans une base de données ?
Par sécurité, il est une bonne pratique qui consiste à crypter les mots de passe stockés dans une table de votre base de données. Ainsi, dans le cas ou une personne malveillante arriverait à consulter votre table, elle ne pourrait pas voir le mot de passe, mais une suite de caractères dépourvue de sens.
Comment stocker ces mots de passe cryptés?
Première étape : créer la table
Nous allons utiliser phpMyAdmin. Dans une base de données, créons une table ‘tableTest’ de 3 champs :
- Cliquez sur le nom de votre base de données dans la liste de la zone de gauche (ici ‘avirer’)
- La liste des tables de cette base s’affiche dans la zone de droite
- En bas de cette liste un petit formulaire propose de ‘Créer une nouvelle table sur la base avirer’
- Nous entrons donc les valeurs ‘tableTest’ et ’3′ pour le nombre de champs
- En cliquant sur le bouton Exécuter, un nouveau formulaire s’affiche
Notez que selon le nombre de champs, ce nouveau formulaire peut être horizontal
Remplissons le formulaire avec ces valeurs par colonne)
- Le premier champ sera notre identifiant, nommons le id
- Conserver le type INT (pour integer : entier)
- Cocher la case A_I pour appliquer la contrainte Auto incrément (cela peut être dans une liste déroulante nommée Extrra) à ce champ
- Appliquer l’index PRIMARY pour faire de ce champ une clé primaire (cela peut être un bouton radio sous une icône en forme de clé)
- Le second champ contiendra le login, nommons le login
- Choisir VARCHAR (pour donner un type chaine de caractère)
- Indiquer la valeur ‘10‘ pour la longueur de ce champ
- Appliquer l’index UNIQUE pour imposer l’unicité de ce champ (pas deux fois le même login dans la table)(cela peut être un bouton radio sous une icône avec un U)
- Le troisième et dernier champ stockera le mot de passe crypté, nommons le password
- Choisir VARCHAR (pour donner un type chaine de caractère)
- Indiquer la valeur ‘50‘ pour la longueur de ce champ (cette fois la longueur doit tenir compte du fait que le cryptage allonge considérablement les textes
Deux réglages enfin.
- Modifier le champ login pour le rendre sensible à la casse en choisissant utf8_bin pour son interclassement (Pour que le login toto soit différent du login TOTO)
- Modifier le moteur de stockage de la table pour le passer en InnoDB (et bénéficier des dernières performances de MySQL
Valider pour enregistrer la table en cliquant sur le bouton Sauvegarder
Seconde étape : Entrer des données
Vous devez accéder à votre table. Si elle n’est pas affichée dans la partie droite, cliquez sur son nom dans la zone de gauche. Ensuite, pour pouvoir ajouter des données (= ajouter des enregistrements, = insérer des tuples…), cliquez sur le bouton Insérer du menu supérieur
Un formulaire double s’affiche pour entrer les données. Il suffit d’entrer vos textes (dans le ou les formulaires) :
- La première ligne de chaque formulaire est dans notre cas (souvent) réservée au champs auto incrément, on la laisse intacte
- La première colonne est réservée aux fonctions, on y intervient que rarement. (Mais nous le ferons dans le cas de notre cryptage)
- Nous entrons donc le login dans le champ valeur (par exemple Jérôme)
- Nous entrons le pass dans le champ valeur (par exemple toto)
- IL FAUT UTILISER UNE FONCTION DE CRYPTAGE POUR CE MOT DE PASSE: PRENONS PASSWORD
- Cliquez sur le bouton Exécuter pur insérer ces données
Notez que nous aurions pu choisir un autre type de cryptage dans la liste des fonctions : MD5, SHA1…. Nous aurions également pu entrer deux enregistrements dans la table en utilisant les deux formulaires disponibles
Le système phpMyAdmin nous indique que l’enregistrement a été inséré dans la table. En cliquant sur le bouton Afficher vous pourrez consulter vos données et vérifier que le mot de passe est bien crypté.
Dernière étape tester les données en php/SQL
Plaçons nous dans le cas d’un formulaire post avec deux champs ‘login’ et ‘pass’. A la validation du formulaire, les données sont réceptionnées dans une page de validation. Voyons un bref code testant les identifiants dans notre table.
//Reception des données
$login = isset($_POST['login']) ? ($_POST['login'] : '';
$pass= isset($_POST['pass']) ? ($_POST['pass'] : '';
//Ecriture de la requete
$query = "SELECT * FROM tableTest
WHERE login='$login'
AND
pass =PASSWORD('$pass')";
Une fois les données du formulaire réceptionnées (lignes 2 et 3), la requête SQL cherche les enregistrements de la table tableTest OU le contenu du champ login est identique au contenu de la variable $login (ligne 7) ET le contenu du champ pass est identique au cryptage par la fonction SQL PASSWORD().
En effet, si le visiteur entre toto dans le formulaire d’entrée, il faut crypter cette valeur ‘toto’ pour la comparer avec le contenue de la table, qui lui est crypté ! (ligne 9)
| << Précédent Remplir une table à partir d’une autre à l’aide d’une requête SQL |
Suivant >> Création d’une table MYSQL des pays. |
Tags: SQL, tutoriel
Posted in SQL / Mysql | Comments (0)
No comments yet












