Créée le, 19/06/2015

 Mise à jour le, 19/05/2019

Visiteurs N°  




Accueil
Nouveau Blog Nouveautés Moteur de Recherche Votre Caddie Pour Vos Achats Votre Espace Membre Vos Signets et Vos Jeux Préférés Page de Bienvenue Statique Site en Français Site en Anglais
Sommaires
Électronique Fondamentale Technologie Fondamentale Testez vos Connaissances Électronique Théorique Digitale Électronique Pratique Digitale Lexique Électronique Numérique Data book TTL Data book CMOS Dépannage TVC Mathématique
Micro-ordinateurs
Théorique des Micro-ordinateurs Testez vos Connaissances Pratique des Micro-ordinateurs Glossaires sur les Ordinateurs
Physique
La lumière Champ d'action Rayonnement Électromagnétique
Technologies
Classification des Résistances Identification des Résistances Classification des Condensateurs Identification des Condensateurs
Formulaires Mathématiques
Géométrie Physique 1. - Électronique 1. 2. - Électronique 1. 3. - Électrotechnique 1. 4. - Électromagnétisme
Accès à tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages N. B. M. - Tome I - 201 Pages E. T. M. - Tome I - 554 Pages Business à Domicile Ouvrages 34 pages gratuits Nos E-books Logiciel Géométrie Logiciel Composants Électroniques
Aperçu de tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages E. T. M. - Tome I - 554 Pages Logiciel Géométrie Logiciel Composants Électroniques
Nos Leçons aux Formats PDF
Électronique Fondamentale Technologie Fondamentale Électronique Théorique Digitale Électronique Pratique Digitale Théorique des Micro-ordinateurs Mathématiques
Informatique
Dépannage Win98 et WinXP et autres Dépannage PC Glossaire HTML et Programmes PHP et Programmes JavaScript (en cours de travaux) Création de plusieurs Sites
Forums
Forum Électronique et Infos Forum Électronique et Poésie
Divers et autres
Formulaire des pages perso News XML Statistiques CountUs Éditeur JavaScript Nos Partenaires et nos Liens Utiles Gestionnaire de Partenariat Nos Partenaires MyCircle Sondages 1er Livre d'Or 2ème livre d'Or

Signets :
  Leçons suivantes        Leçons précédentes     Bas de page
  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet


Implémenter une authentification avec PHP et MySQL :



Identification des visiteurs :


Cette leçon explique comment implémenter différentes techniques d'authentification des utilisateurs, à l'aide de PHP et de MySQL.

Le Web est un support relativement anonyme, mais il est souvent intéressant de savoir qui visite votre site. Heureusement pour la confidentialité des utilisateurs, il n'est possible de deviner que peu d'informations personnelles sans leur accord explicite des Internautes.

Avec un peu de travail, les serveurs peuvent déterminer plusieurs informations sur les ordinateurs et les réseaux qui tentent de s'y connecter. Les navigateurs Web ont l'habitude de s'identifier, en fournissant aux serveurs leur nom, leur numéro de version et le nom de votre système d'exploitation. Vous pouvez également déterminer la résolution et le nombre de couleurs de l'écran de vos visiteurs, ainsi que la largeur de leur écran de navigateur.

Chaque ordinateur connecté à Internet possède une adresse IP (Internet Protocole) qui lui est propre. A partir de l'adresse IP d'un visiteur, vous pouvez découvrir certaines informations le concernant. Il est ainsi possible de savoir qui possède une adresse IP, et avec un peu de chance et quelques suppositions, à quel endroit cette personne se trouve. Certaines adresses sont plus utiles que d'autres. Généralement, les personnes disposant d'une connexion permanente à Internet possèdent une adresse IP permanente. En revanche, les personnes qui doivent se connecter par modem à leur fournisseur d'accès Internet (FAI) pour ouvrir chaque session se voient affecter temporairement l'une des adresses IP de leur fournisseur. La prochaine fois que vous verrez une adresse de ce genre, il est fort probable qu'elle appartienne à un autre ordinateur.

Heureusement pour les utilisateurs du Web, aucune des informations fournies par leur navigateur ne permet de les identifier. Si vous souhaitez connaître le nom (ou d'autres détails personnels) d'un utilisateur, vous devrez le lui demander.

Plusieurs sites Web obligent, ou tout du moins encouragent fortement, leurs utilisateurs à fournir ces détails. Ainsi, certains sites proposent gratuitement le contenu de son journal, mais uniquement pour les personnes qui acceptent d'indiquer leur nom, leur sexe et leur revenu global. Certains sites d'informations et de discussions pour informaticiens, permet aux utilisateurs inscrits de participer à des discussions sous un pseudonyme et de personnaliser l'interface de leur site. La plupart des sites de commerce électronique enregistrent les détails de leurs clients lors de leur premier enregistrement. Cela signifie que les clients n'ont pas besoin de saisir à nouveau tous ces détails lors de leurs visites ultérieures.

Après avoir demandé et reçu les informations concernant l'un de vos visiteurs, vous avez besoin d'un moyen d'associer ces informations au même utilisateur la prochaine fois qu'il viendra sur votre site. Si vous partez de l'hypothèse qu'une seule personne visite votre site avec un compte donné, et que chaque visiteur ne se sert que d'un seul ordinateur, vous pouvez enregistrer un cookie sur l'ordinateur de cette personne pour l'identifier avec son accord. Ces suppositions ne sont certainement pas vraies pour tout le monde, puisqu'il arrive souvent que plusieurs personnes partagent un même ordinateur et qu'une même personne se serve de plusieurs ordinateurs. Il arrivera donc que vous ayez besoin de demander à vos utilisateurs de s'identifier à nouveau. Vous devrez en plus leur demander de prouver leur identité.

Le fait de demander à un utilisateur de prouver son identité s'appelle une authentification. La méthode d'authentification la plus courante sur le Web consiste à demander aux utilisateurs de fournir un nom d'utilisateur et un mot de passe valides. L'authentification est également utilisée pour autoriser ou interdire l'accès à certaines pages ou à certaines ressources, mais elle peut être optionnelle, ou encore utilisée dans d'autres buts, comme la personnalisation d'un site.

Implémenter un contrôle d'accès :

Cette opération n'est généralement pas difficile à implémenter. Le code présenté dans le Listing 1 peut fournir trois sorties possibles. Si le fichier est chargé sans paramètre, il affiche un formulaire HTML demandant un nom d'utilisateur et un mot de passe. Ce type de formulaire est représenté à la figure 1.


Notre_Formulaire_HTML_avec_Mot_de_Passe.png

Si des paramètres sont fournis, mais qu'ils ne soient pas corrects, le programme affiche un message d'erreur comme sur la figure 2.


Code_Acces_Errones.png

Si ces paramètres sont présents et corrects, le programme affiche un contenu secret comme sur la figure 3.


Page_Reservee_au_Personnel.png

Le code permettant de créer les fonctionnalités illustrées par les figures 1, 2 et 3 est présenté dans les Listings 1 et 2


Listing 1. - Bienvenue_Page_Secrete.php - Un mécanisme d'authentification à base de PHP et de HTML :

Listing 2. - Bienvenue_sur_la_Page_de_CEI.php - Un mécanisme d'authentification à base de PHP et de HTML (Suite) :


Pour visualiser l'aperçu, en cliquant ici. [Exemple 1].

Si vous avez bien examiné le code du Listing 2, nous avons fourni le Nom d'utilisateur (Jean-Pierre) ainsi que le Mot de passe (Domestique), afin que vous puissiez vous rendre compte du bon déroulement du programme.

Les codes des Listings 1 et 2 fournissent un mécanisme d'authentification simple, permettant aux utilisateurs autorisés de voir le contenu d'une page, mais il pose plusieurs problèmes.

En effet, ce script :

Petite_Main.gif  Possède un nom d'utilisateur et un mot de passe codés directement dans son code source.

Petite_Main.gif  Enregistre le mot de passe en clair dans le code source.

Petite_Main.gif  Ne protège qu'une seule page.

Petite_Main.gif  Transmet le mot de passe en clair.

Ces problèmes peuvent être résolus de différentes manières.

Enregistrement des mots de passe :

Il vaut mieux éviter d'enregistrer les noms d'utilisateur et les mots de passe dans un script. A l'intérieur d'un script, ces données sont difficiles à modifier. Il est toujours possible d'écrire un script qui se modifie lui-même, mais cela n'est généralement pas une bonne idée. Cela signifie, en effet que vous possédez un script sur votre serveur, qui est exécuté sur votre serveur et accessible en écriture pour tout le monde. L'enregistrement de ces informations dans un autre fichier de votre serveur vous permet d'écrire plus facilement un programme pour ajouter ou pour supprimer des utilisateurs, et de modifier leur mot de passe.

Dans un script ou dans un fichier brut, il existe une limite sur le nombre d'utilisateurs que vous pouvez enregistrer sans affecter sérieusement les performances du script. Si vous avez l'intention d'enregistrer un grand nombre d'éléments dans un fichier pour pouvoir les parcourir ultérieurement, il vaut mieux utiliser une base de données, comme nous l'avons déjà vu. D'une manière générale, si vous possédez une liste de plus de 100 éléments, il vaut mieux les placer dans une base de données que dans un fichier brut.

L'utilisation d'une base de données pour enregistrer les noms d'utilisateur et les mots de passe ne rend pas le script beaucoup plus complexe, et cela vous permet d'authentifier très rapidement plusieurs utilisateurs différents. Cela vous permet aussi d'écrire facilement un script pour ajouter de nouveaux utilisateurs, pour supprimer des utilisateurs également, et pour permettre aux utilisateurs de modifier leur mot de passe.

Le Listing 3 permet de créer vos tableaux de la base de données MySQL.

Listing 3. - Create_Auteur_Authentification.sql - Ces requêtes MySQL permettent de créer la base de données auteur, le tableau auteur, et trois utilisateurs :

Le Listing 4 permet de créer votre formulaire relativement simple pour vos essais, il est intéressant de répéter et de faire des révisions que ce soit sur le plan PHP ou HTML.

Listing 4. - Bienvenue_Page_Secrete_2.php - Tout simplement un formulaire comprenant deux champs, un nom d'utilisateur et un mot de passe :

Le Listing 5 présente un script permettant d'authentifier les visiteurs d'une page, grâce à une base de données.

Listing 5. - Bienvenue_sur_la_Page_de_CEI_2.php - Utilisation de MySQL pour améliorer notre système d'authentification de base :

Et enfin, vous trouverez le Listing 6 de connexion concernant le serveur local "easyPHP". Pour les serveurs à distant, vous devez changer les paramètres de connexion.

Listing 6. - Config_Authentification.php - Utilisation pour la connexion, uniquement pour serveur local :

La base de données que nous utilisons peut être créée, en ouvrant une sessions MySQL sous le nom de l'utilisateur root, et en exécutant le contenu du Listing 3.

Pour visualiser l'aperçu, en cliquant ici. [Exemple 2].

Si vous avez bien examiné le code du Listing 5 concernant l'exemple 2, nous avons fourni les Noms d'utilisateur : "Jean-Pierre", "Daniel", "Paul" dans la base de données ainsi que les Mots de passe : "Domestique", "User", "123456", (123456 pour Paul) afin que vous puissiez vous rendre compte du bon déroulement du programme.

Cryptage des mots de passe :

Que nous enregistrions nos données dans une base de données ou dans un fichier, il vaut mieux éviter d'enregistrer les mots de passe dans un format non crypté. Un algorithme de hachage unidirectionnel permet d'améliorer la sécurité d'une manière très simple.

La fonction PHP crypt() est une fonction de hachage cryptographique unidirectionnelle. Voici le prototype de cette fonction :

    string crypt (string str [, string salt] )

A partir de la chaîne str, cette fonction renvoie une chaîne pseudo-aléatoire. Par exemple, à partir de la chaîne "pass" et de la clé de cryptage "xx", crypt() renvoie "xxkT1mYjlikoI". Cette chaîne ne peut pas être décryptée et retransformée en "pass", même par son créateur. C'est pourquoi l'intérêt de cette fonction ne semble pas évident. La caractéristique la plus intéressante de crypt() est que sa sortie est déterministe. Pour une chaîne et une clé de cryptage données, la fonction crypt() renvoie toujours le même résultat.

Au lieu de choisir un code PHP comme celui-ci :

    if ($username == "user" && $password == "pass" )

    {

      // Ok, les mots de passe correspondent.

    }

Il vaut mieux choisir :

    if ($username == "user" && crypt($password, "xx") == "xxkT1mYjlikoI" )

    {

      // Ok, les mots de passe correspondent.

    }

Nous n'avons pas besoin de connaître la chaîne qui s'est transformée en "xxkT1mYjlikoI" à l'aide de crypt(). Il suffit de comparer les deux mots de passe cryptés.

Comme nous l'avons déjà vu, il vaut mieux éviter de coder directement dans un script les noms des utilisateurs et les mots de passe associés. Il vaut mieux les enregistrer dans un fichier séparé ou dans une base de données.

Si nous utilisons une base de données MySQL pour enregistrer nos données d'authentification, nous pouvons nous servir de la fonction PHP crypt() ou de la fonction MySQL PASSWORD(). Ces deux fonctions ne fournissent pas le même résultat, mais elles ont le même but. En effet, crypt() et PASSWORD() prennent en argument une chaîne de caractères, et y appliquent un algorithme de hachage non réversible.

Pour utiliser PASSWORD(), nous pouvons écrire la requête SQL du Listing 5 comme ceci :

    $query = "SELECT COUNT(*) FROM auteur WHERE Nom = '$Nom' AND Pass = password('$Mot_de_Passe')" ;

Cette requête compte le nombre de lignes du tableau "auteur" dont la valeur dans la colonne "Nom" correspond au contenu de $Nom, et dont la valeur dans la colonne "pass" est identique à la sortie de PASSWORD() appliquée sur le contenu de $Mot_de_Passe. En supposant que nous obligeons nos utilisateurs à choisir des noms d'utilisateur uniques, le résultat de cette requête est soit 0, soit 1.

Nous terminons ainsi cette onzième leçon et nous verrons dans la prochaine, L'interaction avec le sytème de fichiers et le serveur.



  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet.   Haut de page
  Page précédente   Page suivante







Nombre de pages vues, à partir de cette date : le 23 MAI 2019

compteur de visite

    




Envoyez un courrier électronique à Administrateur Web Société pour toute question ou remarque concernant ce site Web. 

Version du site : 10. 5. 14 - Site optimisation 1280 x 1024 pixels - Faculté de Nanterre - Dernière modification : 19 MAI 2019.   

Ce site Web a été Créé le, 14 Mars 1999 et ayant Rénové, en MAI 2019.