Protéger un repertoire avec un .htaccess

Protéger un répertoire avec un fichier .htaccess est très simple 🙂

Le fichier .htaccess

Pour commencer, on créé un fichier .htaccess dans le répertoire à protéger et on y met le contenu suivant:

AuthName "Le texte autoritaire que vous voulez"
AuthType Basic
AuthUserFile "/le/chemin/absolu/vers/le/fichier/.htpasswd"
Require valid-user

« AuthName » affichera le texte que vous y avez mis sur la fenêtre d’identification (ex: « Merci d’entrer votre login et votre mot de passe »).
« AuthUserFile » est le chemin absolu vers le fichier .htpasswd qui contiendra vos paires de logins et mots de passe. En fait vous pouvez nommer ce fichier comme vous voulez, mais commencez de préférence par .ht 😉

Si vous ne connaissez pas le chemin absolu de votre fichier .htpasswd, vous pouvez utiliser ce code dans un fichier php placé dans le même dossier:

<?php echo realpath(null); ?>

Vous n’aurez plus qu’à y ajouter « /.htpasswd » (ou le nom que vous avez donné à votre fichier) 😉

Le fichier .htpasswd

Dans ce fichier, vous allez mettre les paires de login / mots de passe cryptés.
ça resemble à ça:

login:mot_de_passe_crypté

Vous pouvez le faire vous même avec ce petit outil pour faire automatiquement autant de paires que vous voulez.
Vous écrivez les  login:mot_de_passe sur chaque ligne, et le script vous retourne ça avec les mots de passe cryptés 😉

Si les mots de passes posent problème sur votre serveur (algo de cryptage pas compatible), voici le code à mettre dans un fichier .php pour récupérer les mots de passe.
En l’utilisant sur votre serveur, il ne devrait pas y aura pas de problème de compatibilité.

<html>
  <head>
    <meta charset="UTF-8">
    <title>Générateur de .htpasswd</title>
  </head>
  <body>
    <form method="post">
      <textarea id="textzone" name="logpass" cols="75" rows="6"><?php
        echo (isset($_POST['logpass']))?
        $_POST['logpass'] :
        "login:password\nJacky:son_mot_de_passe\nBruce:mot_de_passe";
      ?></textarea><br>
      <button type="submit">Crypter !</button>
    </form>
    <?php
      if(isset($_POST["logpass"])){
        echo "Vous copiez ça dans votre fichier de login:password et voilà !<br><br>";
        $tab=explode("\n", $_POST["logpass"]);
        foreach($tab as $line){
          $rr=explode(':', $line, 2);
          echo $rr[0].':'.crypt($rr[1]).'<br>';
        }
      }
    ?>
  </body>
</html>

Dernier point, toujours bon à rappeler, utilisez des mots de passe dur à deviner (ex: C3c1!E5t,un.M0t/de!P45s3*sUr;) ) et si possible des logins pas trop évidents non plus

Voilà !
Vous allez pouvoir avoir des dossiers sûrs 🙂.