La protection par htaccess est la méthode la plus simple et la plus sûre pour protéger rapidement d’un mot de passe des pages web.
Vous avez un serveur sur Apache et vous voulez interdire l’accès d’un dossier à tout le monde ? Il suffit pour cela de créer quelques fichiers.
Ce fichier est nommé .htpasswd
et contient par exemple :
robert:88uH/tR/WKOwI meuh:2597DugpwDsSw looser:93Pq8KOCEadqk
C’est à dire une liste de login:mot-de-passe
très simple. Mais attention le mot-de-passe étant crypté il faut le coder avant de l’inclure, en utilisant un générateur d’htpasswd en ligne par exemple.
Placez ce fichier où bon vous semble sur le serveur.
Ce fichier ne vous servira que si vous voulez créer des groupes d’utilisateurs.
Placé souvent à côté du .htpasswd
, il contiendra par exemple :
admins: robert meuh famille: meuh visiteurs: looser gamoren
Ce fichier sera placé dans le dossier à protéger, c’est lui qui dictera les règles de passage vers vos pages. Il contiendra par exemple :
AuthName "Administration privée" AuthUserFile /usr/local/bin/www/.htpasswd AuthGroupFile /dev/null AuthType Basic require valid-user
AuthName
sera affiché dans la boîte de dialogue lors de la demande d’authentificationAuthUserFile
est le chemin complet (entendez chemin réel sur le serveur) jusqu’à votre fichier .htpasswd
AuthGroupFile
est le chemin complet jusqu’à votre fichier .htgroup
si vous en utilisez un, sinon laisser /dev/null
Le require
signifie que ne seront accéptés que les personnes listées à la suite.
require user robert meuh
Dans cet exemple par exemple, seuls robert et meuh pourront accéder au dossier.
require group admins
require group famille
Ici seuls ceux appartenant au groupes admins et famille (définis dans .htgroup
) pourront passer la barrière.
La valeur valid-user
permettra ici à quiconque sera présent dans le .htpasswd
d’accéder au dossier protégé.
L’on peut aussi autoriser ou interdire l’accès selon le domaine de l’utilisateur. Il suffit de remplacer les conditions d’entrée dans l’.htaccess
par :
order deny,allow deny from all allow from .fr allow from .tecp.be
Ici les domaines .fr et .tecp.be pourront accéder car ils sont précédés d’allow
(accepter), les autres non car l’on a spécifié la clause deny from all
(refuser les autres). L’on peut ainsi de cette façon intervertir, et avoir par exemple allow from all
et deny from .be
. Cette méthode a l’intérêt de ne pas avoir besoin de fichier .htpasswd
et de se faire sans demande de mot de passe à chaque fois.
De même l’on peut mélanger authentification par mot de passe et authentification par domaine et avoir :
order deny,allow deny from all allow from .tecp.be require user gamoren satisfy any
Ici personne ne peut y accéder sauf si l’utilisateur vient du domaine .tecp.be ou l’utilisateur est gamoren. Gamoren a de la chance, il pourra donc se connecter de n’importe où avec son mot de passe mais sera automatiquement reconnu s’il est chez lui.
Si à la place de satisfy any
on avait satisfy all
, il faudrait que l’utilisateur soit gamoren et qu’il ait comme domaine .tecp.be.
Pour ne protéger que quelques fichiers il suffit d’entourer tout le code à inserer dans l’.htaccess
par <Files secret.html perso.jpg>
et </Files>
pour empêcher l’accès à secret.html et perso.jpg.
On peut utiliser l’htaccess pour se réserver l’accès à quelques fichiers sur un serveur mais si on veut de nombreux utilisateurs, devoir éditer un fichier à chaque fois peut devenir rapidement contraignant. Des scripts PHP ou CGI peuvent par contre très bien s’en charger.
Cette protection est très efficace mais attention tout de même car d’autres failles indépendantes du .htaccess
peuvent permettre l’accès aux fichiers protégés, ou encore peuvent permettre l’édition du fichier .htpasswd
. Et bien sûr comme tout mot de passe, celui-ci peut être découvert sur un bout de papier ou divulgué par la torture…
est un développeur web vivant à Paris — Contact — Archives
Textes et contenus sous licence Creative Commons.
1 4sky :
Merci beaucoup pour ce petit tutorial vraiment bien fait :-)
2 4sky :
Ah oui, j’ai oublier de le signaler :
Pour le paramètre AuthName, il faut mettre entre double quote le texte.