Restriction d'accès; fichier .htaccess
Page d'entrée > Informatique > Astuces
Mots clef: protection par mot de passe, .htaccess

Sommaire :
maj: 08/2012

Fichier .htaccess

La doc Apache : http://httpd.apache.org/docs/2.2/howto/htaccess.html

HTAccess File Generator: un script qui vous fabrique vos fichiers .htaccess
Extrait:  de:   vos fichiers .htaccess complexes en quelques clics...
HTAccess generator est un générateur en ligne qui vous permet de créer très simplement votre fichier .htaccess, même sans grandes connaissances informatiques.
Simple et efficace, il dispose d'options sympathiques (définition de pages selon la géolocalisation de l'internaute, pages spécifiques selon la version du navigateur employé par l'internaute...

Il existe des failles dans la protection:
HTExploit : exploiter les fichiers contenus dans un répertoire protégé par un .htaccess


Comment restreindre l'accès à des pages hébergées sur un serveur de free.fr
Extrait d'une vieille doc de Free, remise en forme et commentée par GT en avril 2007. Une version actuelle se trouve ici (au moins en avril 2007). 
Je ne l'ai pas regardée en détail, mais voici une autre doc qui pourrait être similaire (ou mieux? ou complémentaire?).


Etape 1 : Création d'une table d'utilisateurs

NoteGT: à faire une seule fois, et à mettre de préférence dans un répertoire inaccessible (voir note 4 ci-dessous).

Il s'agit de stocker une liste d'utilisateurs et leurs mots de passe correspondants dans un fichier (dans la suite, le fichier est  secret/passlist ou bien secret/password/maliste.txt selon les exemples) . Le fichier ressemble à cela :
martin:PasSw0rd
jean:SecR3t
sophie:H1dDeN
Premier champ: le nom de l'utilisateur.
Secondchamp: le mot de passe en clair.

Notes:
1) Vous devez transférer ce fichier en mode ASCII (voir documentation de votre client FTP) pour assurer la conversion des caractères "fin de ligne". NoteGT: en fait il faut qu'il soit au format Unix, et dans ce cas, on peut le transférer en binaire, comme le reste des fichiers.
2) Vous pouvez stocker ce fichierdans n'importe quel répertoire de votre site mais il faudra en spécifier le chemin dans la directive PerlSetVar AuthFile  (voir étape 2).
3) Assurez-vous de ne pas laisser d'espace ou de tabulations dans ce fichier.
4) Si cela vous gène de laisser les mots de passe en clair dans votre site web, il y a un moyen pour les protéger: Le moyen le plus simple est de stocker votre fichier dans un sous-répertoire qui n'est pas accessible par http. Pour ce faire, il suffit de créer un fichier .htaccess (voir étape 2) dans le sous-répertoire dont vous souhaitez interdire l'accès et d'y mettre la simple ligne: deny from all


Etape 2 : Activer la restriction d'accès (fichier .htaccess dans chaque répertoire à protéger)

Pour limiter l'accès aux utilisateurs déclarés dans le fichier passlist , vous devez créer un fichier .htaccess dans le répertoire que vous souhaitez limiter.

Remarques : Sous plate-forme Microsoft Windows, il n'est pas possible de créer directement sur votre ordinateur un fichier portant le nom ".htaccess". Vous devez le créer avec un autre nom, le transférer sur le serveur, puis le renommer.  Note GT: c'est faux, on peut parfaitement le créer.

Attention: Le nom du fichier est .htaccess et le point est le premier caractère du nom de fichier.
" ce n'est pas une extension de fichier"

Exemple :
Vous créez un fichier toto.txt dans lequel vous saisissez les paramètres de votre futur fichier .htaccess
Vous le copiez sur le serveur.
Avec votre logiciel FTP renommez le en .htaccess

PerlSetVar AuthFile secret/passlist
AuthName "Acces Restreint"
AuthType Basic
require valid-user
La commande PerlSetVar désigne le chemin d'accès à la table des utilisateurs. Il est relatif à la racine de votre site Web. Donc si vous avez stocké votre table d'utilisateurs dans le répertoire secret/password/ sous le nom 'maliste.txt', vous devez modifier la directive PerlSetVar AuthFile en conséquence : PerlSetVar AuthFile secret/password/maliste.txt

La commande AuthName "Acces Restreint" définit le texte qui invitera l'utilisateur à inscrire son login / mot de passe. Vous pouvez personnaliser ce texte comme bon vous semble. Voici ce que cela donne si vous le laissez ainsi.

La commande require valid-user autorise tous les utilisateurs valides à télécharger les fichiers du répertoire. Vous pouvez aussi utiliser require user martin sophie pour autoriser uniquement les utilisateurs martin et sophie, mais pas jean.

Attention: Il est fortement conseillé de protéger sa liste de mots de passe en la nommant autrement. Vous pouvez ainsi la stocker dans un sous-répertoire de votre site Web que vous protégerez en créant un fichier .htaccess dans ce sous répertoire, contenant uniquement la ligne : deny from all

Ceux qui veulent aller plus loin, peuvent consulter le guide utilisateur d'Apache qui traite en détail tous les aspects d'authentification.


Mini Foire aux questions

Lorsque j'essaie d'accèder à mon répertoire, j'ai une erreur de type 'Internal server error', qu'est-ce que ca veut dire ?
Votre fichier ".htaccess" n'est pas reconnu par le serveur, il comporte probablement des erreurs. Voici les quelques points à vérifier:

La syntaxe des différentes commandes ( PerlSetVar, AuthName ) est-elle correcte ?
Une erreur d'orthographe empêchera le serveur Web de comprendre votre fichier .htaccess

L'emplacementde la table d'utilisateurs est-il correctement spécifié ?
Vous devez donner le chemin completdepuis la racine de votre site même si le fichier .htaccess se trouve dans le même répertoire.

Avez-vous effectué le transfert du fichier .htaccess en mode ASCII ?
Les caractères de "fin de ligne" sont incompatibles entre les différents systèmes d'exploitation. Il suffit de retransférer le fichier en mode ASCII pour corriger ce problème.

La table d'utilisateurs existe-t-elle ?
Etes-vous sûr de votre nom de table d'utilisateurs ?
Le serveur fait la différence majuscules/minuscules dans les noms de fichiers et vous devez spécifier le nom complet du fichier en précisant l'extension s'il y a lieu.
Prenez garde aux caractères, espaces et tabulations qui peuvent se trouver dans votre fichier en début et fin de ligne.
 

Lorsque je rentre l'URL de mon répertoire protégé dans mon navigateur, il me demande bien de m'authentifier mais me refuse à tout les coups, je suis pourtant sûr de mon mot de passe ?
La table d'utilisateurs doit être transférée en mode ASCII sur votre site web. De plus son format est un couple 'nom:mot de passe' par ligne. Veuillez à ce qu'aucun espace ne se trouve avant le nom ou après le mot de passe.

J'ai lu la documentation d'Apache et il n'est fait nulle part mention de PerlSetVar AuthFile et il y est dit qu'il faut donner les mots de passe cryptés dans la table d'utilisateurs !
Nous avons modifié Apache afin d'en permettre une utilisation simple pour tous, ce qui explique la directive PerlSetVar AuthFile. Elle est obligatoire et ne peut pas être remplacée par les équivalents d'Apache.