Table des matières

Protéger une page web

On va voir dans cet article comment protéger l’accès à une page web (phpsysinfo par exemple) par mot de passe, car toutes les interfaces web n’ont pas toujours de fonction native pour protéger l’accès.

Création du fichier Digest

On va utiliser une authentification Digest qui permettra de sécuriser la connexion le temps de l’échange de l'identifiant et du mot de passe, contrairement à l’authentification Basic qui laisse passer le mot de passe en clair.

Tout d’abord, il faut activer le module Digest d’Apache si ce n’est déjà fait. Pour l’activer, tapez la commande

a2enmod auth_digest

Maintent que le module est activé, on va créer un fichier Digest dans /etc/apache2 à l’aide de la commande htdigest (j’ai mis le fichier dans /etc/apache2 mais vous pouvez le mettre dans n’importe quel répertoire lisible par Apache).

La commande pour créer le fichier Digest est la suivante :

htdigest -c /etc/apache2/passwords Realm Username

/!\Si dans le futur vous avez besoin de créer d’autres utilisateurs, il suffira de taper la même commande mais sans le “-c”. Ca rajoutera le nouvel utilisateur à la suite dans le fichier. Si vous laissez le “-c”, la commande va écrire un nouveau fichier.

Après avoir tapé la commande, un mot de passe vous sera demandé.

Maintenant que notre fichier htdigest est créé, il faut dire à Apache de l’utiliser.

Configuration d’Apache

Allez dans le répertoire /etc/apache2/sites-enabled/ et ouvrez votre fichier de configuration Apache. (/var/www/phpsysinfo par exemple)

Petite parenthèse. Si le répertoire que vous voulez protéger ne se trouve pas dans le DocumentRoot indiqué dans le fichierde config, il faudra utiliser un Alias. Il vous suffit de rajouter la ligne

Alias /nomdel'alias répertoiredel'alias

Ca donnerait par exemple

Alias /phpsysinfo /var/www/phpsysinfo

. Il faut que l'utilisateur Apache ait accès à ce répertoire également. Fin de la parenthèse.

Ajoutez les lignes suivantes dans votre virtualhost pour protéger l'accès à tout le site :

<Location />
 AuthType Digest
 AuthName "Realm"
 AuthDigestDomain /var/www/ https://www.exemple.fr
 AuthDigestProvider file
 AuthUserFile /etc/apache2/passwords
 Require valid-user
 </Location>

Si vous souhaitez protéger que l'accès à une page en particulier, rajoutez le chemin dans “Location” comme suit

<Location /phpsysinfo>
 AuthType Digest
 AuthName "Realm"
 AuthDigestDomain /var/www/phpsysinfo/ https://www.exmple.fr/phpsysinfo
 AuthDigestProvider file
 AuthUserFile /etc/apache2/passwords
 Require valid-user
 </Location>

Quelques infos sur ce bloc :

Il vous reste plus qu’à sauvegarder et à redémarrer Apache.

Maintenant quand vous allez rentrer l’adresse de l’interface web ou du répertoire à protéger, une fenêtre de connexion apparaîtra.

Si tout a fonctionné, en rentrant l’utilisateur et le mot de passe configuré plus haut, vous aurez accès au contenu.

Pensez à rediriger les connexions http vers https

Dans mon cas, toutes les connexions http sont redirigées vers le https, donc je n’ajoute la protection que dans le vhost du port 443. Si vous ne redirigez pas les connexions http vers https l’interface sera sans aucune protection quand on y accède en http.