Protéger l'accès d'une ressource à l'aide d'un mot de passe
Parfois, il est nécessaire de protéger du contenu en ligne avec un mot de passe. Voici une solution de base qui fonctionne en ayant seulement à configurer les fichiers .htaccess et .htpasswd d'Apache.
Le fichier .htaccess (hypertext access) est un fichier texte qui permet de configurer le serveur Apache et qui est souvent utilisé pour gérer les droits d'accès, les redirections et les erreurs personnalisées. De son côté, le fichier .htpasswd est aussi un fichier texte qui contient les noms d'usagers et les mots de passe donnant accès à la ressource.
Créer un fichier .htaccess
Pour cet exemple, je définirai un répertoire à protégé, nommé "download". Il faut d'abord créer un fichier nommé .htaccess, y inscrire les règles et le placer sur le serveur. Remarquez que ce fichier n'a pas de nom, il s'agit seulement d'une extension. À l'intérieur, on y inscrira ceci :
AuthType Basic
AuthName "Nom de la section"
AuthUserFile /var/www/site/download/.htpasswd
Require valid-user
La directive AuthType Basic indique que la méthode de vérification des accès se fera à l'aide du fichier indiqué dans AuthUserFile. On indiquera aussi le nom de la section protégée dans AuthName. La dernière ligne, Require valid-user, est la condition qui doit être respectée pour avoir accès à la ressource. Autrement dit, le visiteur doit avoir une authentification valide qui correspond au nom d'utilisateur/mot de passe définit dans .htpasswd. Si elle est valide, le visiteur aura accès au répertoire "download" et son contenu. On aurait aussi pu remplacer la dernière ligne par ceci pour protéger l'accès à une page spécifique:
<files>
Require valid-user
</files>
Obtenir le chemin d'accès abolu du fichier .htpasswd
Le chemin d'accès au fichier .htpasswd doit être absolu sur le serveur (chemin complet). Plutôt que de le demander à un administrateur réseau, je préfère créer un fichier php que je place à la racine du répertoire à protéger (ainsi que le fichier .htaccess et .htpasswd), et faire afficher le chemin réel du fichier :<?php echo realpath('.htpasswd'); ?>
Créer un fichier .htpasswd
Il faut ensuite créer un autre fichier texte nommé .htpasswd. Chaque ligne devra contenir un nom d'utilisateur et un mot de passe encrypté, sous la forme suivante :
username:encryptedpassword
Je n'entrerai pas dans les détails de l'encryptage de mot de passe alors je me contenterai pour le moment d'utiliser un des nombreux générateurs de mots de passe présents sur le web : générateur 1 - générateur 2 (sinon, se connecter en SSH au serveur et utiliser l'utilitaire htpasswd...). Copier/coller la ligne dans le fichier .htpasswd.
S'assurer de transférer les fichiers en ligne et tester l'accès.