Page d'accueil - La sécurité des sites sur le web.

Cette page présente en quelques lignes les principales mesures de précautions a prendre par les webmasters...

Protéger un dossier du serveur avec un .htaccess

Supposons que vous ayez créé un dossier "Admin" dans lequel il y a tous les fichiers d'administration de votre site. Comment empêcher que n'importe qui accède à ces pages ?
C'est là que les fichiers .htaccess vont bien nous aider : on peut très facilement créer une protection par Login / Mot de passe qui empêche l'accès à tous les fichiers du dossier.

Il va falloir créer 2 fichiers :

  1. .htaccess : ce fichier contiendra l'adresse du .htpasswd et quelques autres options que vous pourrez définir.
  2. .htpasswd : ce fichier contiendra une liste de logins / mots de passe, pour chaque personne autorisée à accéder aux pages !

Créer le .htaccess

La première étape est de créer sur votre disque dur un fichier appelé .htaccess. Oui, c'est un fichier qui n'a pas de nom et qui a seulement une extension, à savoir .htaccess. Ne soyez donc pas étonnés s'il commence par un point (si Windows ne permet pas de créer un fichier sans extention, vous pouvez créer un fichier 1.htaccess que vous renommerez sur le serveur). Ouvrez le fichier avec votre éditeur de texte favori. Nous allons écrire des codes qui n'ont rien à voir avec du HTML ou du PHP : ce sont des instructions pour le serveur. Elles vont lui expliquer que seules certaines personnes sont autorisées à accéder au dossier. Copiez-y ce code :

AuthName "Page d'administration protégée"
AuthType Basic
AuthUserFile "/home/site/www/admin/.htpasswd"
Require valid-user

Parmi ces 4 lignes, il y en a 2 que vous allez devoir changer :

  1. AuthName : c'est le texte qui invitera l'utilisateur à inscrire son login / mot de passe. Vous pouvez personnaliser ce texte comme bon vous semble.
  2. AuthUserFile : là c'est plus délicat, c'est le chemin absolu vers le fichier .htpasswd (que vous mettrez dans le même répertoire que le .htaccess).

Mais comment je trouve ce chemin absolu moi ?

En effet, c'est la plupart du temps délicat à trouver car cela dépend du serveur. Heureusement, il existe une fonction PHP qui va beaucoup nous aider : realpath. Cette fonction donne le chemin absolu vers le fichier que vous indiquez. Vous allez donc faire comme ceci pour trouver le chemin absolu :

  1. Créez un fichier appelé chemin.php.
  2. Inscrivez juste cette ligne de code à l'intérieur :
  3. <? echo realpath('chemin.php'); ?>
  4. Envoyez ce fichier sur votre serveur avec votre logiciel FTP. Placez-le dans le dossier que vous voulez protéger.
  5. Ouvrez votre navigateur et allez voir ce fichier PHP. Il vous donne le chemin absolu, par exemple dans notre cas /mnt/154/sdb/9/e/willnetlesite/index.php
  6. Copiez ce chemin dans votre .htaccess
  7. Supprimez le fichier chemin.php de votre serveur, il ne nous sert plus à rien maintenant qu'il nous a donné le chemin absolu.

Si vous êtes hébergés chez Free, il y a une petite subtilité dans la gestion de la localisation du .htpasswd : vous ne devez pas renseigner la ligne AuthUserFile par le chemin absolu du fichier, mais par son chemin relatif à partir de la racine de votre espace perso. Exemple : si vous utilisez un espace Free nommé monftpfree, et que vous placez votre fichier .htpasswd dans un répertoire admin, le fichier chemin.php vous renverra un chemin sous la forme /mnt/XXX/sda/X/X/monftpfree/admin/.htpasswd. Vous devez alors simplement écrire : /monftpfree/admin/.htpasswd. D'autre part, il ne faut pas écrire AuthUserFile mais PerlSetVar AuthFile.

Voilà, on a fini de créer le .htaccess, on peut maintenant passer au .htpasswd.

Créer le .htpasswd

Créez maintenant un nouveau fichier avec votre éditeur de texte. Le .htpasswd va contenir la liste des personnes autorisées à accéder aux pages du dossier. On y inscrit une personne par ligne, sous cette forme :

  1. mateo21:$1$MEqT//cb$hAVid.qmmSGFW/wDlIfQ81
  2. ptipilou:$1$/lgP8dYa$sQNXcCP47KhP1sneRIZoO0
  3. djfox:$1$lT7nqnsg$cVtoPfe0IgrjES7Ushmoy.
  4. vincent:$1$h4oVHp3O$X7Ejpn.uuOhJRkT3qnw3i0

Dans cet exemple, il y a 4 personnes autorisées à accéder au dossier : mateo21, ptipilou, djfox et vincent.

Comment peut-on crypter les mots de passe ?

Bonne question ! Encore une fois, il y a une super fonction PHP qui va nous tirer d'affaire : crypt. Vous lui donnez un mot de passe et, ne cherchez pas à savoir comment, elle vous le crypte.Par exemple, si mon mot de passe est "kangourou", voici le code PHP que je devrai écrire pour l'obtenir en version cryptée :

<? echo crypt('kangourou'); ?>

Crypter ses mots de passe est très utile : en effet, si quelqu'un vient un jour à lire votre fichier .htpasswd (quelqu'un qui utilise le même PC que vous par exemple), il ne verra que le mot de passe crypté. Et là, aucun risque qu'il ne retrouve votre mot de passe : ce cryptage est indéchiffrable. Il est à sens unique.

Envoyer les fichiers sur le serveur

Voilà, désormais le dossier est protégé. Si quelqu'un essaie d'accéder à une des pages du dossier (en l'occurence admin.php), il obtiendra une fenêtre comme celle-ci lui demandant de se logger :