Accueil > Tutoriels pour Webmasters > Sécuriser un dossier (avec htpasswd)

Sécuriser un dossier (avec htpasswd)

Sur un site web il peut être recommandé de sécuriser certains dossiers tels que la partie administration. Cela est facilement possible si la partie administration se trouve dans un dossier spécifique (exemple: un dossier appelé "admin").
Une méthode assez simple pour très bien sécuriser un tel dossier serait d'utiliser un fichier ".htpasswd". Cet article va expliquer dans ce tutoriel comment réaliser une telle protection.

Tutoriel

Il faut noter que la méthode décrite dans ce cours s'utilise avec des serveurs qui fonctionnent sous Apache. Si un autre type de serveur est utilisé sur un site web, alors il est possible que ça ne fonctionne pas.

Sécurisation d'un dossier

Lorsqu'il y a une protection par htpasswd une fenêtre s'ouvre pour demander un nom d'utilisateur et un mot de passe. Une fois le tutoriel terminé, voici un exemple de la fenêtre qui s'ouvrira lorsqu'un utilisateur souhaitera accéder au dossier sécurisé:

Fenêtre authentification requise
Fenêtre nécessitant une authentification

En entrant les bonnes données (le nom d'utilisateur avec son mot de passe associé) alors il est possible d'accéder au dossier. Dans le cas contraire la page ne sera pas autorisé à être ouverte et il y aura alors une erreur 401 (aussi appelée "Unauthorized").

Création du fichier htaccess

La première étape pour sécuriser un dossier c'est de créer un fichier htaccess. Ce fichier permet de sécuriser un dossier et permet d'indiquer au serveur où se situe le pseudo et le mot de passe. Ainsi, le serveur saura quel sont les utilisateurs autorisé à accéder à la zone sécurisée.

Le dossier htaccess doit être créé à partir du bloc-notes windows ou d'un éditeur de texte quelconque. Il faut noter que vous devez absolument ne pas lui donner d'extension (tel que .txt ou .doc). Le nom exact que vous devez lui donner c'est: ".htaccess". Cela pose souvent un soucis car le système d'exploitation Windows ne permet pas de commencer un nom de fichier par un point. En raison de ce problème, il faut uniquement appeler le fichier "htaccess" pour le moment (sans le premier point et sans extension).

Le fichier htaccess doit ensuite contenir le code suivant:

Code pour le fichier .htaccess:
AuthName "Page d'administration protégée, veuillez vous identifier"
AuthType Basic
AuthUserFile "/home/dossier/www/votre-repertoire/admin/.htpasswd"
Require valid-user

Toutefois, la ligne "AuthUserFile" doit impérativement être modifiée pour qu'elle corresponde à votre site. Chaque site web possède un chemin absolu qui diffère selon les hébergeurs. Par conséquent, il est nécessaire d'effectuer une certaine manipulation pour le connaitre. Voici la manipulation a effectuer pour connaitre le chemin absolu de votre hébergeur.

Il est tout d'abord obliger d'utiliser une page PHP. Pour vous donner un exemple clair, il est recommandé de créer une page exprès pour déterminer ce chemin absolu (que vous pouvez appelé "chemin-absolu.php" par exemple). Dedans il faut utiliser la fonction PHP "realpath". Autrement dit, il faut copier le texte suivant sur la page que vous venez juste de créer:

Code PHP à insérer sur la page "chemin-absolu.php":
<?php
echo realpath("chemin-absolu.php");
?>

Une fois que c'est fait, il ne reste plus qu'à uploader la page "chemin-absolu.php" sur le serveur (dans le dossier à sécuriser, tel que "admin"). Puis, il faut ouvrir cette page dans un navigateur web (par exemple à la page: http://www.example.com/admin/chemin-absolu.php).
Une fois la page ouverte, vous obtenez un chemin. C'est ce chemin qui va être utilisé dans le code donné précédemment (à la place où il y avait AuthUserFile).

En ayant suivis correctement les instructions, le fichier appelé "htaccess" est près à être utilisé. Il faut l'uploader sur le serveur. Finalement, il est possible de renommer le nom du fichier sur le serveur en ajoutant un "point" au début du nom "htaccess". De ce fait, le fichier s'appelle dorénavant ".htaccess".

Création du fichier htpasswd

Cette étape est beaucoup plus simple (le plus dur à été effectué). Le fichier htpasswd comporte les informations avec les noms des utilisateurs qui peuvent accéder au dossier. Pour chaque utilisateur il y a un mot de passe associé. Il faut savoir qu'il peut y avoir autant d'utilisateur que souhaité.

Il y a un code particulier à insérer dans le fichier ".htpasswd", car le mot de passe est codé (pour éviter qu'il puisse être récupéré par un utilisateur malveillant). Voici un exemple concret de code envisageable dans un tel fichier (exemple fictif):

Exemple de code à insérer sur la page ".htpasswd":
nom-utilisateur1:$1$hdkZ3x0v$iADjlj7l3V6T8dDuv3UhB/
nom-utilisateur2:$1$rRAJj8b6$bAa4BugX0ehWRHdo0Cbks/
nom-utilisateur3:$1$HtWwWac.$AoNSxMUcr.9aw2u5gP5Tu0

Sur ce code, il est possible de voir le nom d'utilisateur à gauche et le mot de passe crypté à droite.

A noter que les webmasters qui ont un espace d'hébergement sur free n'ont pas besoin d'avoir un mot de passe crypté. Ce qui donne un code tel que celui-ci:

Exemple de code à insérer sur la page ".htpasswd":
nom-utilisateur1:mot_de_passe
nom-utilisateur2:motdepasse
nom-utilisateur3:password

Pour générer chacune des lignes il y a un outil pour générer un fichier ".htpasswd". En utilisant cet outil, il est possible d'obtenir très facilement le code à insérer sur la page ".htpasswd". Rendez-vous sur cette page, inscrivez votre nom d'utilisateur et votre mot de passe, puis cryptez-les pour savoir le code qu'il faut insérer sur la page ".htpasswd". Lorsque vous aurez générer le code à l'aide du générateur de code htpasswd pour la page associée vous aurez juste à l'ajouter a votre dossier admin et ce sera fini.
Il ne faut pas perdre de vue qu'il faut créer la page "htpasswd" (sans le point pour les utilisateurs de Windows) puis penser à rajouter le point au début du nom du fichier.

Protection supplémentaire

Ce cours viens d'expliquer comment créer un fichier intitulé ".htpasswd", mais il est possible de nommer le fichier différemment, ce nom n'est pas obligatoire. Il est par exemple possible de nommer le fichier ".htnomdefichiersecuriter". De cette manière, si un pirate informatique recherche un fichier intitulé ".htpasswd" il ne trouvera rien sous ce nom.