L'Authentification en PHP




  1. Ca sert à quoi ?

Si vous souhaitez protéger par mot de passe, et login, l'accès à certaine partie de votre site, c'est très simple, il suffit de savoir le faire. On me demande souvent "comment je fais pour restreindre l'accès ?", en fait, la vraie question, et c'est comme ça qu'il faut opérer comme pour tout, c'est "comment je fais pour autoriser certaines personnes à accéder à cette partie du site".
Il existe principalement 2 types d'authentification (mis à part les certificats clients pour lesquels le problème est différent, et je n'ai pas les moyens de le tester pour l'instant !!!) :
  • fichier ".htaccess" et ".htpasswd"
  • utilisation d'une base de données

  • Mais ceci ne sert qu'à autoriser l'accès à une page. Il peut être pratique ensuite de garder l'authentification en mémoire si l'on souhaite l'utiliser plus tard. Par conséquent, les systèmes de login/password sont souvent utilisés conjointement aux cookies. Si vous souhaitez des infos sur les cookies, vous pouvez aller sur ma page sur les cookies en PHP.

    Je vais donc traiter ici les 2 sujets le plus simplement et succinctement possible, en précisant dans un premier temps les différences entre les 2 types d'authentification.



      2. Différences entre les types d'authentification

    Ca, c'est de la transition... J'aurais du être animateur télé !!!

    En fait, voici les différences majeures entre les 2 systèmes :
    .htaccess Base de données
    • Géré par le serveur HTTP
    • Encryption automatique faite par le navigateur
    • Présentation en boite de dialogue
    • Peut s'utiliser avec de nombreux serveurs (si l'hébergeur l'autorise, bien sur)
    • S'applique en général à tout un répertoire
    • Reconnu comme étant assez sécurisé
    • Géré par le moteur PHP du serveur
    • Pas forcément crypté
    • Présentation au sein d'une page HTML, donc personnalisable
    • Connexion à une base de données
    • Rarement sécurisé (dépend du développeur)
    • Doit être géré pour chaque fichier
    • Mot de passe facilement gérable par l'utilisateur



      3. Exemple avec un fichier .htaccess

    Déjà, il faut créer le fichier .htaccess et le fichier .htpasswd. Pour ce faire, en cas de soucis, vous pouvez aller ici : info sur .htpasswd et .htaccess.

    Vous avez donc vos fichiers correctement paramétrés, et qui protègent tout un répertoire. Dans ce répertoire, mettez un fichier "index.php" qui sera celui que vous utiliserez pour vos tests (évidemment, si vous préférez autre chose, n'hésitez pas, mais c'est le nom que je vais utiliser dans toute la page !).

    Voici un exemple de code pour récupérer le login utilisé par l'utilisateur :
    <html>
    <head>
      <title>Authentification .htaccess</title>
    </head>
    <body>
    L'utilisateur authentifié est :<br>
    <?php
    $User = getenv("Remote_User");
    echo "<b>$User</b><br>\n";
    ?>
    </body>
    </html>

    Ce code affiche donc le nom de l'utilisateur enregistré sur le site. Il vous suffit donc de créer les cookies associés si vous souhaitez garder les infos enregistrées pour d'autres pages.

    En ajoutant un cookie, voici ce que vous obtiendriez :
    <?php
    $User = getenv("Remote_User");
    setCookie("UserName",$User);
    ?>
    <html>
    <head>
      <title>Authentification .htaccess</title>
    </head>
    <body>
    L'utilisateur authentifié est :<br>
    <?php
    echo "<b>$User</b><br>\n";
    ?>
    </body>
    </html>
    Pour rappel, les cookies ne peuvent être fixés qu'en en-tête du fichier et plus après... D'où le traitement avant l'affichage de "<html>".


      4. Exemple avec base de données

    Dans ce cas, il faut déjà avoir les informations de connexions à la base (serveur, login, mot de passe, nom de la base). Il faut d'abord créer une page qui demande le login et le mot de passe de l'utilisateur. Voici un exemple pour ce genre de page :
    <html>
    <head>
      <title>Authentification Base de Données</title>
    </head>
    <body>
    <form action="login.php" method="post">
    <font color="white"><b>Login :</b><input size="20" value="" name="un"><br>
    <b>Mot de passe :</b><input type="password" size="20" value="" name="pw"><br>
    <input type="submit" value="Entrer">
    </body>
    </html>
    Ensuite, voici le code de la page "login.php" correspondant, en supposant que la table dans laquelle est enregistrée le mot de passe et le login de l'utilisateur est "Utilisateur" :
    <html>
    <head>
      <title>Authentification Base de Données</title>
    </head>
    <body>
    <?php
      $hostname = "monmysql.fournisseur.fr"; // nom du serveur ou se trouve votre base
      $username = "login";
      $password = "password";
      $database = "mabase";

      $link = mysqli_connect($hostname,$username,$password, $database);

      $stmt = "Select * from Utilisateur where login='".$un."'";
      $result = mysqli_query($link,$stmt);
      if (mysqli_num_rows($result) == 0) {
        echo "Login incorrect";
      }
      else {
        $row = mysqli_fetch_object($result);
        $dbpasswd = $row->PassWord;
        if ($dbpasswd == $pw) {
          echo "Login et mot de passe OK";
        }
        else {
          echo "Mot de passe incorrect";
        }
      }
    ?>
    </body>
    </html>
    Ce code n'est évidemment pas parfait, mais il fonctionne. Il ne vous reste plus qu'à l'appliquer à votre cas perso, et le faire évoluer pour vous en améliorant la sécurité (cryptage des mots de passe par exemple), ajout de cookie, et autres détails de ce style.




    Page modifiée le : 24/07/2003
    Site modifié le : 30/08/2018


    Valid XHTML 1.0 Transitional