Astuces de Protection par Mot de passe HTAccess

♦ Publié par Jeff Starr dans.htaccess, Security
Mise à jour le 30 juin 2018 • 25 commentaires

Récemment, un lecteur a demandé comment protéger par mot de passe un répertoire pour chaque adresse IP spécifiée tout en permettant un accès ouvert à tous les autres. Dans mon article, Stupides astuces htaccess, je montre comment protéger par mot de passe un répertoire pour chaque adresse IP sauf celle spécifiée, mais pas pour le cas inverse. Dans cet article, je vais démontrer cette technique avec une grande variété d’autres astuces de protection par mot de passe utiles, y compris quelques-unes de mon article stupide Astuces htaccess. Avant d’entrer dans les choses juteuses, nous passerons en revue quelques bases de la protection par mot de passe HTAccess.

La protection par mot de passe HTAccess fonctionne en cascade

Avant de commencer, il y a peu de choses que vous devez savoir sur les différentes directives de protection par mot de passe d’Apache. Tout d’abord, ces astuces de protection par mot de passe s’appliquent au répertoire dans lequel elles sont placées. Par exemple, pour protéger par mot de passe l’ensemble de votre site, vous devez placer l’une de ces astuces dans le fichier HTAccess racine accessible sur le Web pour votre site. Les directives HTAccess sont appliquées dans la structure des répertoires, en cascade, de sorte que tous les sous-répertoires sont également protégés.

Vous avez besoin de deux fichiers pour la protection par mot de passe: htaccess et htpasswd

La deuxième chose que vous devez savoir est que, dans la plupart des cas, il y a deux parties à toute implémentation de protection par mot de passe: le fichier . htaccess et le fichier . htpasswd. Le fichier . htaccess contiendra l’une des astuces douces fournies dans cet article, tandis que le fichier . htpasswd contiendra le nom d’utilisateur requis et une version cryptée de votre mot de passe.

Il existe plusieurs façons de générer votre fichier . htpasswd. Si vous êtes à l’aise avec Unix, vous pouvez simplement exécuter la commande « htpasswd« . Par exemple, la saisie de la commande suivante créera un fichier de mot de passe fonctionnel dans le répertoire /home/path/:

htpasswd -bc /home/path/.htpasswd username password

Placer le fichier de mot de passe au-dessus du répertoire racine accessible sur le Web est une bonne mesure de sécurité. Si vous examinez le fichier après sa création, la seule chose qu’il contiendra est une ligne qui ressemble à ceci:

username:Mx1lbGn.nkP8

Au lieu d’exécuter une commande Unix, vous préférerez peut-être utiliser l’un des 200 000 services en ligne fournissant un générateur de mot de passe en ligne.

Peu importe comment et où vous décidez de créer votre fichier . htpasswd, gardez à l’esprit son emplacement pour l’utiliser dans son ou ses fichiers HTAccess associés. Et oui, vous pouvez utiliser un fichier . htpasswd pour plusieurs fichiers HTAccess placés dans plusieurs répertoires.

Savoir quelle version d’Apache vous utilisez

Dans chacun des exemples ci-dessous, les directives sont incluses dans un conteneur <IfModule>. Ceci permet d’éviter que votre serveur ne plante si les modules Apache requis ne sont pas disponibles ou non installés. Généralement, les modules requis seront présents, mais la vérification <IfModule> est une bonne mesure de précaution.

Lorsque vous implémentez l’une des méthodes de protection par mot de passe de cet article, vérifiez bien quelle version d’Apache vous utilisez avant de commencer. Les exemples de cet article supposent que vous utilisez Apache 1.3 ou 2.0, car les conteneurs <IfModule> vérifient la présence du module mod_auth. Ainsi, si vous utilisez Apache 2.2 (ou une version supérieure), vous voudrez remplacer les conteneurs <IfModule> actuels par les éléments suivants:

<IfModule mod_authn_file.c></IfModule>

En cas de doute, demandez à votre hôte, installez l’extension ShowIP Firefox ou fouillez dans le panneau de configuration de votre serveur. Et, si vous ne le savez tout simplement pas, que vous vous en fichez ou que vous ne pouvez pas le comprendre, supprimez simplement les balises d’ouverture et de fermeture <IfModule> de la méthode que vous souhaitez utiliser et appelez-la bonne. Sans eux, si votre serveur n’est pas équipé du module requis, il retournera simplement un message d’erreur 500, qui est facilement résolu en supprimant les directives de mot de passe.

Vous pouvez personnaliser le dialogue sur l’invite de mot de passe

La dernière chose que vous devez savoir avant de plonger dans quelques astuces douces est que vous pouvez personnaliser le message affiché sur l’invite de mot de passe en éditant la ligne suivante dans chacun des exemples de cet article:

AuthName "Username and password required"

En modifiant le texte à l’intérieur des guillemets, vous pouvez utiliser la langue de votre choix pour l’invite de mot de passe.

Alors maintenant, à ce stade de notre aventure, nous sommes prêts à plonger dans quelques astuces juteuses de protection par mot de passe HTAccess..

Protection par mot de passe de base

Pour protéger par mot de passe votre site ou tout répertoire, placez ce code dans le fichier HTAccess associé:

# basic password protection<IfModule mod_auth.c> AuthUserFile /home/path/.htpasswd AuthName "Username and password required" AuthType Basic <Limit GET POST> Require valid-user </Limit></IfModule>

C’est à peu près aussi basique que possible. N’oubliez pas de créer votre fichier de mot de passe et de spécifier son répertoire dans la première ligne. Passons à quelque chose de plus intéressant.

Open-access pour une adresse IP, protégez par mot de passe tout le monde

Cette méthode est idéale pendant le développement de projets, où vous souhaitez un accès ouvert avec la possibilité de donner accès aux autres via un mot de passe:

# password protect excluding specific ip<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from 111.222.333.444 Satisfy Any</IfModule>

En plaçant ce code dans le fichier HTAccess du répertoire que vous souhaitez protéger, seule l’adresse IP spécifiée sera autorisée en accès libre; tout le monde devra entrer le nom d’utilisateur et le mot de passe appropriés.

Accès ouvert à plusieurs adresses IP, protection par mot de passe pour tous les autres

Le code ci-dessus peut être facilement modifié pour fournir un accès ouvert à plusieurs adresses IP tout en refusant tout le monde:

# password protect excluding specific ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from localhost Allow from 111.222.333.444 Allow from 555.666.777.888 Satisfy Any</IfModule>

Vous pouvez ajouter autant d’adresses IP que nécessaire. Cette méthode est excellente pendant le développement du projet, où les conditions suivantes s’appliqueront:

  • Le développement du projet reste privé pour les visiteurs réguliers
  • L’accès peut être accordé aux clients (ou à toute personne) en fournissant le mot de passe
  • Les membres de l’équipe de développement ont un accès libre sur leurs machines respectives

En plus de fournir un accès illimité à votre équipe, vous pouvez également garder à l’esprit certains services Web en incluant les directives suivantes (insérer ci-dessus le Satisfy Any directive):

Allow from validator.w3.org
Allow from jigsaw.w3.org
Allow from google.com

Accès ouvert à tous avec protection par mot de passe pour des adresses IP spécifiques

Cette méthode est utile dans diverses situations, y compris dans les cas où vous souhaitez bloquer une liste d’adresses IP malveillantes.

# password protect only for specified ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 111.222.333.444 Deny from 555.666.777.888 Satisfy Any</IfModule>

Vous pouvez lister autant d’adresses IP que nécessaire. Vous pouvez également refuser des blocs IP entiers en tronquant l’adresse en conséquence. Par exemple, pour bloquer toute personne venant d’une adresse IP commençant par « 999.888« , nous ajouterons la directive suivante:

Deny from 999.888

Pour plus d’informations sur le fonctionnement de ce système, consultez cette section de mon article stupide sur les astuces htaccess.

Accès ouvert à tous avec protection par mot de passe pour un numéro CIDR spécifique

Similaire à la méthode précédente, voici une technique permettant d’exiger un mot de passe uniquement à partir d’un numéro CIDR sélectionné. Cette méthode est utile pour bloquer les méga-spammeurs tels que RIPE, Optinet et autres. Si, par exemple, vous vous retrouvez à ajouter ligne après ligne des directives Apache Deny pour des adresses commençant par les mêmes premiers chiffres, choisissez l’une d’entre elles et essayez une recherche whois. La valeur CIDR représentant chaque adresse IP associée à ce réseau particulier figure dans les résultats whois. Ainsi, le blocage via CIDR est un moyen efficace d’empêcher de manière éloquente toutes les instances IP du délinquant d’accéder à votre site. Voici un exemple généralisé de blocage par CIDR:

# password protect only for specified CIDR<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 10.1.0.0/16 Deny from 80.0.0/8 Satisfy Any</IfModule>

Le mot de passe protège un seul fichier

J’ai utilisé cette technique d’innombrables fois. Pour protéger un seul fichier par mot de passe, ajoutez-le simplement à votre fichier HTAccess:

# password protect single file<IfModule mod_auth.c> <Files "protected.html"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </Files></IfModule>

Ici, nous protégeons un fichier nommé « protected.html » de l’accès. Le fichier ne sera disponible qu’après la soumission du nom d’utilisateur et du mot de passe appropriés.

Protection par mot de passe de plusieurs fichiers

Pour protéger plusieurs fichiers, la méthode est très similaire, mais cette fois, nous utilisons la directive FilesMatch d’Apache. Cela nous permet de lister autant de fichiers que nécessaire:

# password protect mulitple files<IfModule mod_auth.c> <FilesMatch "(protected\.html)|(passwords\.txt)"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>

Dans cet exemple, nous protégeons par mot de passe deux fichiers, « protected.html » et « passwords.txt« . Pour en ajouter d’autres, incluez simplement plus d’instances de « |(filename\.ext) » dans la liste des fichiers.

Protection par mot de passe de plusieurs types de fichiers

Avec cette méthode, nous utilisons la directive FilesMatch d’Apache pour protéger par mot de passe plusieurs types de fichiers. Voici un exemple:

# password protect mulitple file types<IfModule mod_auth.c> <FilesMatch "\.(inc|txt|log|dat|zip|rar)$"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>

Une fois en place, ce code nécessitera un mot de passe pour accéder aux types de fichiers suivants: .inc, .txt, .log, .dat, .zip, et .rar. Personnalisez pour répondre à vos besoins.

Protection par mot de passe pour tout sauf un seul fichier

Merci à Brett Batie pour cette technique puissante permettant d’accéder à un seul fichier tout en protégeant par mot de passe tout le reste:

# password protect everything except a single file<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <Files "open-access.html"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </Files></IfModule>

Lorsqu’il est placé dans le répertoire racine ou dans un répertoire parent, ce code protégera par mot de passe tout sauf le fichier nommé « open-access.html« , qui lui-même peut se trouver dans n’importe quel répertoire ou sous-répertoire ultérieur.

Pour tout protéger tout en permettant l’accès à plusieurs fichiers, nous pouvons utiliser la directive FilesMatch d’Apache à la place. Voici un exemple permettant d’accéder à « open-access-1.html« , « open-access-2.html« , et « open-access-3.html« :

# password protect everything except specified files<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <FilesMatch "(open-access-1.html)|(open-access-2.html)|(open-access-3.html)"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </FilesMatch></IfModule>

Notez que nous pouvons consolider la liste de fichiers comme suit:

<FilesMatch "open-access-\.html">

Une autre approche pour permettre l’accès libre à n’importe quel fichier ou groupe de fichiers consiste à les localiser dans leur propre répertoire avec les directives suivantes ajoutées à son fichier HTAccess:

Allow from all
satisfy any

Enveloppez-le alors

Comme vous pouvez le voir, la fonctionnalité mod_auth d’Apache permet de configurer à peu près la configuration de protection par mot de passe dont vous pourriez avoir besoin. Qu’il s’agisse d’empêcher l’accès à partir d’adresses IP et de domaines spécifiques ou d’autoriser l’accès uniquement à des fichiers et répertoires spécifiques, Apache permet de protéger vos fichiers facilement et en toute sécurité. Et nous n’avons même pas eu accès aux nombreuses possibilités disponibles pour configurer des autorisations d’utilisateurs et de groupes spécifiques. Je pense que je vais garder ça pour un autre article. En attendant, pour plus d’informations sur le puissant mod_auth d’Apache, consultez la Documentation officielle.

Jeff Starr

À propos de l’auteur
Jeff Starr = Développeur Web. Spécialiste de la sécurité. Un bon coup pour WordPress.