Pour diverses raisons, (test de votre site sur serveur distant avant mise en service, zone admin temporaire, ou non…) il peut vous être nécessaire de sécuriser rapidement tout ou une partie de votre site Web. Le moyen le plus rapide et efficace pour cela à mon sens est la création d’un fichier htaccess (et éventuellement le fichier htpasswd associé.)
Je ne prétends pas, bien évidemment, que ce soit la seule méthode disponible mais elle a tout de même le grand avantage de vous permettre de sécuriser efficacement votre site sous apache à l’aide de 3 fichiers seulement. Bien sûr, il ne s’agit pas ici de remplacer un système de gestion des utilisateurs puisqu’il vous faudra manuellement modifier le fichier pour chaque changement mais plutôt de créer une zone sécurisée à des fins de tests par exemple ou simplement pour restreindre l’accès à certaines parties du site pour un nombre très restreint d’utilisateurs.
Je présenterais donc ici la mise en place d’un fichier htaccess et htpasswd pour vérouiller l’accès par mot de passe puis par l’adresse IP dans la seconde partie.
Qu’est-ce qu’un fichier .htaccess
Pour faire très simple, un fichier .htaccess est un fichier de configuration pour un serveur Apache. Celui-ci n’est pas uniquement dédié à des fonctions de sécurisation. Il permet de spécifier des directives apache spécifiques pour un répertoire et ses sous répertoires en surchargeant la configuration de base du serveur.
Concrètement, les directives apache enregistrées dans votre fichier .htaccess s’appliqueront à tout le répertoire dans lequel celui-ci se trouve ainsi que dans les sous répertoires si ceux ci ne disposent pas d’un tel fichier.
Attention toutefois, si vous n’êtes pas l’administrateur principal du serveur ou du site Web, il est possible que certaines des directives ne soient pas autorisées dans le fichier .htaccess.
Sécurisation par mot de passe
Contenu du fichier .htaccess
La sécurisation par mot de passe se fait très simplement à l’aide de 4 lignes dans votre fichier .htaccess (en général, ces directives sont rarement bloquées…)
1 2 3 4 |
AuthName "Page d'administration protégée" AuthType Basic AuthUserFile "/chemin/vers/votre/repetoire/admin/.htpasswd" Require valid-user |
Analysons un peu ces 4 lignes:
- La première ligne concerne tout simplement le message qui sera envoyé par le serveur lors de la tentative de connection à la page
- La seconde ligne concerne le type d’authentification choisi.
- La troisième ligne fait intervenir un nouveau fichier que je détaille ci dessous. Il s’agit du fichier .htpasswd ou seront stockés les noms d’utilisateurs et mots de passe autorisés
- Enfin, la quatrième ligne force l’authentification pour pouvoir accéder au contenu du dossier (et sous-dossiers)
Le fichier .htpasswd
Comme on l’a vu ci-dessus, un fichier supplémentaire est nécessaire, il s’agit du fichier .htpasswd. Celui-ci est très simple et se présente de la façon suivante:
1 2 |
user1:4kPfq$P3XUDjaLcxmA user2:$1$ijJJdWNClSYj4jm1VjFY90YKcD |
Son contenu est on ne peut plus simple, chaque ligne correspond à un utilisateur et son mot de passe associé séparé par « : »
Vous pourriez croire que j’aime me prendre la tête pour créer mes mots de passe… La réalité est que les mots de passes sont cryptés dans le fichier .htpasswd par mesure de sécurité. Aussi, si vous essayez de rentrer la ligne, test:test, l’utilisateur test ne pourra pas se connecter avec le mot de passe « test ». Il vous faut donc crypter vos mots de passe!
Crypter son mot de passe pour le fichier .htpasswd
Pour les plus fainéants, je vous ai mis un script très simple à l’adresse suivante: http://scripts.blupgnup.com/passwd.php
Celui ci est très moche mais fonctionnel… Vous entrez votre nom d’utilisateur et mot de passe et il vous sortira la ligne à coller dans le fichier .htpasswd.
Pour ceux qui souhaitent aller plus loin, voici le contenu du script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php if (isset($_POST['login']) AND isset($_POST['pass'])) { $login = $_POST['login']; $pass_crypte = crypt($_POST['pass']); // On crypte le mot de passe echo '<p>Ligne à copier dans le .htpasswd :<br />' . $login . ':' . $pass_crypte . '</p>'; } else // On n'a pas encore rempli le formulaire { ?> <p>Entrez votre login et votre mot de passe pour le crypter.</p> <form method="post"> <p> Login : <input type="text" name="login"><br /> Mot de passe : <input type="text" name="pass"><br /><br /> <input type="submit" value="Crypter !"> </p> </form> <?php } ?> |
Vous pouvez le copier sur votre serveur à l’emplacement de votre choix et le modifier à souhait pour le rendre plus sexy…
Enregistrement de votre fichier .htpasswd
Il ne vous reste donc plus qu’à enregistrer votre fichier htpasswd dans un dossier (admin par exemple) de votre site web. Il vous faut également déterminer le chemin complet d’accès à votre fichier .htpasswd. Si vous ne le connaissez pas, créer tout simplement un fichier chemin.php et insérez le code suivant par exemple:
1 |
<!--? <span class="hiddenSpellError" pre=""-->echo realpath("chemin.php"); ?></span> |
Si vous vous rendez sur l’adresse http://votresiteweb.com/admin/chemin.php vous connaîtrez alors le chemin d’accès complet. Il ne vous reste plus qu’à modifier votre fichier .htaccess pour renseigner AuthUserFile. Votre site est maintenant sécurisé par nom d’utilisateur et mot de passe!
Enfin, par mesure de précaution, nous vérouillerons l’accès au dossier admin. Une fois de plus, vous l’avez compris, avec un fichier .htaccess. Son contenu sera le suivant:
1 |
Deny from all |
De cette manière, l’accès à tous les fichiers contenus dans le dossier admin est tout simplement interdit. (vous n’y aurez alors accès plus que par ftp ou ssh…)
La sécurisation par adresse IP
Pour accéder à votre site à présent, il vous est nécessaire de renseigner systématiquement le mot de passe. C’est pratique pour empêcher l’accès à tout le monde certes mais ce n’est pas si pratique que ça à l’utilisation… Aussi, si vous avez l’habitude de travailler toujours du même endroit (de chez vous et/ou de votre lieu de travail par exempe…) il peut être utile d’autoriser les connexions provenant d’une certaine adresse IP sans mot de passe. Attention toutefois, si vous renseigner l’IP de votre lieu de travail, toutes les personnes se connectant au même réseau pourront également accéder à votre site sans entrer de mot de passe…
Sécuriser par adresse IP uniquement
Pour empêcher l’accès à votre site excepter en provenance des IP spécifiées, votre fichier .htaccess doit comporter les instructions suivantes:
1 2 3 |
Order Deny,Allow Deny from all Allow from 192.168.0.1 192.168.0.2 |
Les deux premières lignes permettent respectivement de spécifier l’ordre dans lequel on applique les restrictions et de refuser l’accès à toutes les adresses IP. La troisième ligne vous permet d’autoriser les IP spécifiées à accéder aux ressources. Si vous entrez plus d’une IP, il suffit de les séparer par un espace.
Remarque: vous pouvez également autoriser un domaine particulier.
Le meilleur des deux mondes
Si vous souhaitez sécuriser votre site selon une adresse IP correspondant à votre lieu de travail habituel, il est très souvent préférable d’autoriser également l’accès par mot de passe. En effet, si vous êtes un jour en déplacement, l’accès vous sera impossible sans cela. Pour effectuer cette double authentification, rien de plus simple, il suffit de combiner les deux premiers fichiers htaccess et d’y ajouter la directive suivante: Satisfy any
Voici donc votre fichier .htaccess final:
1 2 3 4 5 6 7 8 9 10 |
AuthName "Page d'administration protégée" AuthType Basic AuthUserFile "/chemin/vers/votre/repetoire/admin/.htpasswd" Require valid-user Order Deny,Allow Deny from all Allow from 192.168.0.1 192.168.0.2 Satisfy any |
Votre répertoire est maintenant efficacement protégé et vous n’avez pas à entrer systématiquement un mot de passe sauf si vous vous connectez d’un endroit spécifique…
Bien entendu, s’il s’agit ici d’une méthode de sécurisation efficace, ce n’est absolument pas la plus pratique en termes notamment de gestion des utilisateurs ou de flexibilité… Elle a toutefois le mérite de permettre de disposer rapidement d’un environnement sécurisé à des fins de tests ou de développement par exemple.
N’hésitez pas à faire par de vos remarques ou problèmes en commentaires.
Désolé, les commentaire sont désactivés pour l'instant.