Comment protéger des pages web avec un fichier .htaccess ?

Le problème :

Pour permettre qu'une page soit vue par ceux auxquels elle est destinée mais empêcher quelle soit vue par n'importe qui il existe différentes solutions de contrôle d'accès des pages web.(Voir la page "Contrôler la diffusion de ses publications sur le web)

Nous discuterons ici une solution basée sur de petits fichiers déposés sur le serveur et nommés .htaccess

Le principe :

Lorsqu'on travaille avec un serveur Apache (Cas très fréquent pour les serveurs sérieux sur le web ( Unix, Linux, OSX, etc.) la présence d'un fichier particulier nommé .htaccess indique au serveur que les fichiers dece dossier et toous les sous-dossiers ne doivent pas être diffusés tout à fait librement.

La vérification se fait sur la base d'une identification / mot de passe ou selon le n° IP de la machine qui demande les pages.

Etapes :

1° Pour protéger des pages web, il faut créer un fichier .htaccess et le déposer dans le dossier à protéger

2° .Pour une protection par mot de passe, il faut en outre créer un fichier .htpasswd qui stocke tous les utilisateurs et leur mot de passe (encrypté).

Important : La restriction d'accès s'applique à l'ensemble du répertoire dans lequel est le .htaccess, pas à un certain fichier ou document HTML. Donc les documents à être protéger doivent être rassemblés dans des répertoires séparés de ceux qui sont d'accès sans restriction.

Un fichier '.htaccess' doit être créé dans le répertoire que l'utilisateur veut protéger. (Plusieurs répertoires peuvent avoir des fichiers '.htaccess' différents, mais il ne peut y avoir qu'un seul fichier '.htaccess' par répertoire.

Les restrictions d'accès définies par un fichier .htaccess s'étendent à tous les sous-dossiers.

Créationdu fichier .htaccess

Dans un simple éditeur de texte, (BBedit, notepad, etc) entrer les informations ci-dessous à droite :

  • Le nom du fichier est obligatoirement .htaccess
  • La ligne débutant par AuthUserFile indique au serveur Web où trouver le fichier .htpasswd, qui contient les noms d'utilisateurs et les mots de passe associés. Nous verrons un peu plus loin comment créer ce fichier .htpasswd.
  • La ligne débutant par AuthGroupFile permet de structurer les utilisateurs en groupes, ce qui est très rarement utilisé (car peu utile). A recopier tel quel.
  • La ligne débutant par AuthName indique le nom de la zone protégée. On peut y mettre ce qu'on veut, du moment que c'est clair.
  • AuthType Basic est le type d'authentification utilisé. C'est le seul actuellement vraiment utilisé. A recopier tel quel.
  • La section Limit permet de donner les directives, ici require valid-user (on pourrait spécifier un ou plusieurs utilisateurs précis avec par exemple require user nom1, nom2). GET et POST sont deux méthodes de la norme HTTP, et là on indique qu'on effectue la restriction sur ces deux méthodes. On peut ne pas mettre de limite, ce qui a pour conséquence d'appliquer les directives à toutes les méthodes.

Le fichier .htaccess

AuthUserFile {chemin d'accès au fichier de mots de passe}
AuthGroupFile /dev/null
AuthName {"titre pour la zone de dialogue"}
AuthType Basic

<Limit GET POST>
require user nom d'utilisateur
</Limit>

Les permissions d'accès Unix pour le fichier de ".htaccess " doivent autoriser la lecture pour le propriétaire, le groupe, et les autres. Ceci est éffectué en exécutant la commande suivante dans le répertoire où se trouve le fichier .htaccess :

unix:~/protected 4) chmod 644 .htaccess

Directives utilisables avec un .htaccess (Références documentation Apache)

  • Allow
  • Deny
  • Order
  • Require
  • AddType
  • AuthUserFile
  • AuthGroupFile
  • AuthType
  • AuthName
  • DefaultType
  • ErrorDocument
  • ForceType
  • Options
  • Satisfy
  • <Files> et </Files>
  • <FilesMatch> et </FilesMatch>

Exemples de directives

Exemples

Autoriser un domaine donné d'accéder à un répertoire

La directive Order s'assure que le "allow" supplante "deny" et que ce n'est pas le contraire. Il est toujours bon de préciser les choses. En général "allow from all" est la configuration par défaut des serveurs Web. Ces directives peuvent être restreintes à certaines méthodes HTTP comme GET ou POST (mais il y a aussi PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, et UNLOCK) en utilisant une section débutant par exemple par <Limit GET POST> ...directives... </Limit>.

On n'est pas du tout obligé de les mettre dans ce genre de section: si on ne précise pas à quelle méthodes les directives de contrôle d'accès sont applicables, elles sont bien sûr applicables à toutes les méthodes.

Le .htaccess contient

AuthUserFile /export/home/deiaco/passwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Zone protégée du cours eo771"
AuthType Basic

Order Allow, Deny
Deny from all
Allow from .domaine-autorisé.com


Autoriser un seul domaine à accéder à un ensemble de fichiers

Cet exemple autorise uniquement les gens de l'université de Genève (.unige.ch) à visionner les fichiers qui débutent par les lettres "restreint".

Le .htaccess contient

AuthUserFile /export/home/deiaco/passwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Zone protégée du cours eo771"
AuthType Basic

<Files restreint*>
Order Allow, Deny
Deny from all
Allow from .unige.ch
</Files>


Autoriser deux domaines ou un utilisateur hors domaines-autorisés à accéder à un répertoire

S'il y a à la fois les directives "allow" et "require" dans un même fichier, le serveur a besoin de savoir si le client est supposé remplir toutes les conditions ou bien une seule. Avec le paramètre "any" (au lieu de "all" par défaut) il faut remplir une seul des conditions.

Contrôle par mot de passe: si l'on n'accède pas depuis un des domaines précédents il faut fournir un mot de passe

Le .htaccess contient

AuthUserFile /export/home/deiaco/passwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Zone protégée du cours eo771"
AuthType Basic

Satisfy any

Order Deny,Allow
Deny from all
Allow from .unige.ch
Allow from .dip.ch

Require user elia


Autoriser un ou plusieurs utilisateurs (via l'adresse IP) à accéder à un répertoire

En spécifiant l'adresse IP d'une machine, seule cette machine pourra entrer dans la zone protégée sans mot de passe. On peut ajouter autant d'adresse que l'on désire.

Avec cette méthode, on peut égalment protéger l'accès à un répertoire à un groupe de machine ou un domaine suivant la précision de l'adresse IP (129.194 ou 129.194.34).

Le .htaccess contient

AuthUserFile /export/home/deiaco/passwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Zone protégée du cours eo771"
AuthType Basic

Order Deny,Allow
Deny from all
Allow from 129.194.34.21

Création du fichier .htpasswd

Ce fichier contient le nom des utilisateurs autorisés à accéder à la zone protégée, ainsi que leur mot de passe encrypté.

Pour le créer, il faut ouvrir un terminal et se rendre dans le répertoire courant indiqué dans la ligne AuthUserFile du .htaccess (ici /export/home/deiaco/passwd/).

Taper la commande htpasswd -c .htpasswd utilisateur pour créer le fichier et ajouter un premier utilisateur. Le programme va alors vous demander de saisir un mot de passe, puis le vérifier en le demandant à nouveau. Vous ne verrez pas ce mot de passe lors de sa saisie.

unix:~/passwd 4) htpasswd -c .htpasswd elia
Adding password for user elia
New password: taper le mot de passe
Re-type new password: retaper le mot de passe

Pour ensuite ajouter plus d'utilisateurs, utiliser exactement le même commande mais sans l'option -c.
Pour effacer des utilisateurs, éditer le fichier avec un éditeur de texte et effacer les lignes correspondantes.

Remarque: Les mots de passe sont immédiatement stockés sous forme encryptée... Il est impossible de deviner le mot de passe à partir de la forme encryptée. Il est par ailleurs déconseillé de stocker les fichiers de mots de passe dans un répertoire web où il pourrait être téléchargé.

Ressources

L'écriture des fichiers de contrôle .htaccess

Utilisation de la restriction d'accès aux pages Web

Comprehensive guide to .htaccess

How to make a file for authentication from an apache server


Last modified by eDi - juillet 2002 -