Renforcer la protection d'un site web PHP


La page Protéger un site web PHP montre comment mettre en oeuvre des mots de passe cryptés en vue de sécurisé l'accès à tout ou partie d'un site web destiné à constituer un espace privé accessible aux seuls internautes autorisés. La méthode décrite se décompose de la façon suivante :

1) Choisir un identifiant et un mot de passe en clair
2) Créer une clef (identifiant: mot de passe crypté)
3) Créer un fichier .htpasswd
4) Créer un fichier .htaccess
5) Vérifier le fonctionnement de la protection

Il faut cependant noter que le stockage de mots de passe en texte brut, même s'ils sont hachés (cryptés), n'apporte pas une sécurité parfaite dans le cas où une attaque forte serait réalisée par un pirate particulièrement patient et bien outillé. Pour une sécurité renforcée, il est recommandé d'utiliser des mécanismes d'authentification plus robustes, tels que bcrypt, scrypt ou Argon2, qui sont spécialement conçus pour résister à des attaques fortes. En effet, le fait d'utiliser bcrypt (par exemple) rend beaucoup plus difficile à un pirate, ayant réussi à prendre connaissance d'un mot de passe crypté, la possibilité de retrouver ce mot de passe en clair.

Il existe une solution simple pour générer un mot de passe crypté renforcé, utilisant l'algorithme bcrypt, destiné à être utilisé dans un fichier htpasswd pour un site web, Il suffit d'utiliser la commande htpasswd -B -n utilisateur

L'avantage de la commande htpasswd -B -n utilisateur est sa simplicité et sa facilité d'utilisation à partir de la ligne de commande. Elle est particulièrement pratique pour générer rapidement un hachage bcrypt à utiliser dans un fichier htpasswd. C'est une solution simple et directe, adaptée aux situations où on travaille principalement avec des fichiers htpasswd et où la facilité d'utilisation à partir de la ligne de commande est un atout.

Exemple d'utilisation de la commande htpasswd -B -n utilisateur

Pour générer un mot de passe crypté, destiné à être utilisé dans un fichier htpasswd pour un site web, on peut utiliser l'outil htpasswd qui fait partie du serveur web Apache. Cet outil prend en charge plusieurs algorithmes de hachage, dont bcrypt.
Sous Ubuntu, pour générer le mot de passe crypté du mot de passe "toto" (par exemple), avec bcrypt à l'aide de l'outil htpasswd, il suffit de taper la commande suivante dans le terminal :
• htpasswd -B -n utilisateur

Cela nous demandera d'entrer le nom d'utilisateur (identifiant) et le mot de passe en clair (par exemple, "toto") deux fois et affichera ensuite la sortie (prête à être recopiée telle quelle dans le fichier .htpasswd) contenant le nom d'utilisateur et le mot de passe haché avec bcrypt.
L'option -B indique à htpasswd (sur le site web) d'utiliser bcrypt comme algorithme de hachage. On peut directement ajouter cette entrée, telle quelle, dans le fichier .htpasswd de notre site web, ce qui est très pratique.

01

02

On peut ainsi regrouper dans un fichier .htpasswd tous les identifiants et mots de passes des utilisateurs dotés de droits et décider, à l'aide de fichiers .htaccess, placés dans les différents répertoires, lesquels de ces utilisateurs peuvent avoir accès à tel ou tel répertoire du site.

Il est à noter que si un répertoire n'est pas protégé par un fichier .htaccess et s'il n'est pas contenu dans un répertoire lui-même protégé par un fichier .htaccess alors ce répertoire est accessible par tous les internautes.

En revanche, si un répertoire est protégé par un fichier .htaccess (donc accessible seulement à certains utilisateurs) alors tous les sous-répertoires de ce répertoire sont accessibles uniquement à ces mêmes utilisateurs.

L'image suivante montre un exemple de mise en oeuvre d'un fichier .htpasswd et de fichiers .htaccess sur un site web.
La racine www du site et le répertoire rep0 (par exemple) sont accessibles librement par tous les internautes (sans mot de passe).
Le répertoire rep1 (par exemple) est accessible uniquement aux utilisateurs toto, titi et tata.
Le répertoire rep2 (par exemple) est accessible uniquement à l'utilisateur toto.

Protection d'un site web avec un fichier .htpasswd et plusieurs fichiers .htaccess

Remarques
a) Vérification :
Pour pouvoir créer des mots de passe sécurisés avec bcrypt, comme indiqué ci-dessus, on doit préalablement s'assurer que notre système (Ubuntu) a l'outil htpasswd installé, et si ce n'est pas le cas, on doit installer le paquet apache2-utils sous Ubuntu (ou l'équivalent sur d'autres systèmes).
• sudo apt-get update
• sudo apt-get install apache2-utils

Pour vérifier que le paquet apache2-utils est bien installé, il suffit de taper la commande dpkg -l dans le terminal. le paquet apache2-utils doit alors apparaître dans la liste des paquets installés.
• dpkg -l
ii apache2-utils 2.4.41-4ubuntu3.14 amd64 Apache HTTP Server (utility programs for web servers)
b) Suppression :
Pour supprimer le paquet apache2-utils d'un système basé sur Debian (comme Ubuntu), on peut utiliser la commande apt-get. Voici comment le faire :
• sudo apt-get remove apache2-utils
Si on souhaite également supprimer les fichiers de configuration associés, on peut utiliser l'option --purge :
• sudo apt-get purge apache2-utils
Si on a également installé des dépendances qui ne sont plus nécessaires après la suppression du paquet, on peut les supprimer avec la commande suivante. Mais attention !, dans ce cas, il faut aller doucement et bien prendre note des avertissements et messages affichés par la commande apt-get pendant le processus de suppression afin de ne pas supprimer des paquets qui seraient toujours utilisés par d'autres programmes...
• sudo apt-get autoremove