Accès réservé avec un htaccess

Le fichier « .htaccess » et les différentes options

htacces1_exemple_fichier

AuthUserFile : c’est le nom et le chemin d’accès du fichier qui contiendra les noms des utilisateurs et les mots de passe associés. Ce chemin doit partir de la racine du site.

Ici, les mots de passe seront dans le fichier « .htpasswd » qui se trouve dans le dossier :
/home/login/admin/.htpasswd

On peut, et il est même conseillé de choisir un autre nom que .htpasswd pour le fichier qui contiendra le couple utilisateur/mot de passe. Le point précédent le nom de fichier permettra de cacher (au sens Unix /linux du terme).
Il est également recommandé de mettre le fichier des mots de passe en dehors de l’arborescence du site si l’on en a la possibilité. Si vous avez besoin d’un accès sécurisé, on pourra vous le créer sur votre demande.

AuthGroupFile : permet de définir un droit d’accès à un groupe d’utilisateur. Cette solution n’est que rarement utilisée pour un site Web. Le reste du temps il pointe vers /dev/null. Il faut que cette ligne soit présente.

AuthName : c’est le texte qui apparaîtra dans la fenêtre demandant le mot de passe.

AuthType : L’authentification peut être « basic ». Les mots de passe sont alors envoyés en clair sur le réseau. Pour sécuriser davantage l’accès, il est préférable d’utiliser la méthode d’authentification « digest » qui crypte les mots de passe en MD5 . Ce système n’est supporté que par certains navigateurs (version inférieur à Internet Explorer v5).

Il est toutefois possible d’avoir un niveau de sécurité supérieur en utilisant le mode « digest » (à la place de « basic »). Ce mode fait que la transmission du mot de passe entre le navigateur et le serveur web (« apache ») sera crypté.

Require valid-user : accepte tous les utilisateurs qui ont un login : mot de passe dans .htpasswd.

Require toto titi : limite l’accès à un ou plusieurs utilisateurs précis, ici « toto » et « titi ». A noter que les utilisateurs sont séparés par des espaces.

Option :
Limit : C’est ici qu’on va indiquer ce qui est autorisé et interdit dans le répertoire. Les commandes GET et POST indiquent la récupération de pages web et la réponse à certains formulaires. POST est utilisé pour autoriser l’upload de fichiers sous le protocole http

# : en début de ligne, correspond à un commentaire.

Une fois le fichier « .htaccess » créé, il faut le placer dans le répertoire à protéger.

NB : Pour les utilisateurs de « Windows » il faut nommer votre fichier « htaccess.txt » (car sous windows on ne peut pas nommer un fichier ou un dossier en commençant par un « . » . Il vous faudra donc le renommer après l’avoir transféré chez votre hébergeur avec le client FTP. En revanche, on peut importer un fichier « .htaccess » par FTP sur son PC et le consulter sans aucun problème. Le « . » devant ne posera pas de soucis lors de l’import du fichier par FTP.

Récupérer le chemin (« path ») avec php.

Si vous développez en php, vous pouvez utiliser la fonction « realpath() » qui vous permettra de connaître le chemin d’accès pour obtenir votre « AuthUserFile » qui n’est autre que le dossier à protéger. Pour cela, créez un fichier « realpath.php », dans lequel vous entrez le code suivant (entre des balises php) :
echo realpath(« index.php »);

Placez le fichier sur votre FTP. Attention vous devez posséder un fichier « index.php » sur la racine, si vous n’en avez pas, donnez le nom d’un de vos fichiers qui s’y trouve, comme cela :
echo realpath(« NomFichier.php »);

Allez ensuite sur votre navigateur (Mozilla Firefox, Internet Explorer, Safari,…) et lancer le fichier « realpath.php », vous obtiendrez le chemin de votre site, un résultat proche de ce chemin : /home/user/test/www/index.php
Il ne vous reste plus qu’à y ajouter le reste du chemin (vers le fichier .htaccess) exemple :
/home/user/test/www/secret/.htaccess

NB : Vous pouvez aussi récupérer plus d’info en utilisant le fichier « phpinfo.php » qui contient le code ci-dessous :

phpinfo();

Vous copiez ce fichier « phpinfo.php » sur votre site par ftp, puis vous lancez votre navigateur pour lancer le fichier et obtenir ainsi plus d’info.

NB : Faire très attention de ne pas laisser le fichier « phpinfo.php » sur votre serveur, veuillez donc le supprimer après avoir obtenue les informations.

Qu’est ce que le « .htpasswd » ?

Le « .htpasswd » est un simple fichier texte contenant une liste de « login » et « mot de passe » pour les droits d’accès aux fichiers de chaque utilisateur.
le fichier .htpasswd est composé d’un simple login et d’un mot de passe, donc rien de plus simple à mettre en place. Ouvrez n’importe quel éditeur de texte (Bloc note, Bloc Note ++, Vim,…) et vous n’avez plus qu’à saisir le « nom » suivit de « : » et enfin le « mot de passe »

NB : Le mot de passe peut être crypté. Ce n’est pas une obligation, mais cela est recommandé.

Pour crypter les mots de passe, plusieurs fonctions php peuvent être utilisées :
Exemple la fonction « crypt() ». Pour plus de détail :
http://fr3.php.net/manual/fr/function.crypt.php
On entre le mot de passe en claire et on obtient un mot de passe crypté. (Le formulaire permet de générer le mot de passe crypté).

Vous pouvez aussi utiliser le formulaire de ce site (qui vous crypte les mots de passe automatiquement) :
http://faqs.les-basics-nfrance.com/crypt.php

Exemple de fichier « .htpasswd»

htacces2_exemple_htpasswdOn retrouve donc le binôme Login : « Francis » et mot de passe : « Xfv46GgHz » (ceci est un mot de passe crypté).
Remplir le fichier « txt » avec les personnes autorisées ainsi que leur mot de passe.

Transfert sur l’espace FTP

Une fois les deux fichiers créés (« htaccess.txt » et « htpasswd.txt »), vous devez les copier dans le répertoire à protéger via votre client FTP (FileZilla, FTPexpert,…) (pour l’exemple, nous utiliserons FileZilla).
htacces3_exemple_transfertFTP1Connectez vous et transférer les fichiers. Une fois le transfert réalisé, renommer les fichiers en « .htaccess » et « .htpasswd ».

htacces1_exemple_transfertFTP2On retrouve bien nos fichiers « .htaccess », « .htpasswd » et « realpath.php » (si vous l’avez utilisés pour trouver le chemin).

Test de connexion

Une fois le système mis en place, il ne vous reste plus qu’à tester. Lancer votre navigateur et essayer d’appeler des fichiers du répertoire protégé. Vous obtenez une fenêtre d’identification dans laquelle il faut entre le « login » et le « mot de passe ». Faites le test.
NB : en fonction de votre navigateur, la fenêtre de connexion peut avoir une forme ou des couleurs différentes, mais vous retrouverez toujours les champs login et mot de passe.
htacces5_exemple_connexion

Voici un résumé des différentes étapes

Pour sécuriser un dossier ou un fichier, vous devez :
1) Créer les fichiers « htacces.txt » et « htpasswd.txt »

Fichier « htaccess.txt » :
AuthUserFile /var/www/sites/www.test.fr/prive/.htpasswd (–> à modifier)
AuthGroupFile /dev/null
AuthName « Accès Restreint »
AuthType Basic
require valid-user

Fichier « htpasswd.txt » :
nomLogin1:motdepasse1
nomLogin2:motdepasse2

2) Créer le fichier « realpath.php » (si vous connaissez le chemin exact, vous pouvez sauter cette étape.)

Fichier « realpath.php »:

echo realpath(__FILE__);

3) Copier, puis renommer les fichiers (« .htaccess » et « .htpasswd ») sur votre FTP

4) Faites un test de connexion. (attention essayez de vous connecter avec plusieurs navigateurs, sinon n’oubliez pas de vous déconnectez et de vous reconnecter sur votre navigateur)

Problèmes les plus fréquents

Aucune fenêtre de connexion Login/mot de passe ne se lance :
– Vérifier le chemin que vous avez indiqué dans votre « .htaccess ».
Vérifier avec votre hébergeur que le serveur web (Apache) lis les fichiers .htaccess (avec dans la conf entre les balises Directory ou Location, la variable AllowOverride : avec la valeur Authconfig)
– Vérifier les droits de vos fichiers.

La fenêtre de connexion Login/mot de passe se lance « indéfiniment » (sans prendre en compte le mot de passe)
– Vérifier dans vos fichiers qu’il n’y ait pas « d’espace » ou de « ligne » en trop.
– Crypté vos mot de passe. Certains hébergeurs n’acceptent que les mots de passe crypté. Vous pouvez utiliser le formulaire de cryptage sur : http://faqs.les-basics-nfrance.com/crypt.php ou bien crypter vous-même vos mot de passe en utilisant les fonctions php.
– Vérifier les droits sur le dossier à protéger, ainsi que sur les fichiers « .htaccess » et « .htpasswd ».