Comprendre le Web

Sécuriser un dossier

de son site web (hébergé sur un serveur Apache)

Pour cacher des fichiers :

Interdire le listing

Cette précaution est élémentaire. Deux techniques sont possibles :

  1. La plus simple = placer un fichier nommé index.* (index.htm, index.php, ...) dans tout dossier
  2. Un peu plus complexe = via un .htaccess

La sécurité est renforcée si les deux techniques sont utilisées.

via .htaccess

Imaginons qu'un client (ou un hacker) tape dans la barre des URL le nom de domaine de votre entreprise puis /admin et que s'affiche :

Il constatera qu'il existe un dossier "compta" et ainsi découvrir des informations réservées aux seuls administrateurs ...

Il pourrait essayer de deviner d'autres noms de dossier : /images, /documents, ... et finir par tomber sur un dossier qui ne contient pas de fichier dont le nom débute par "index".

LA solution. Placer, à la racine d'un site web, un fichier nommé .htaccess dont le contenu minimal est :

# Ce fichier est à placer à la racine du site (= dossier pointé par le nom de domaine)
DirectoryIndex index.htm index.php index.html

# protection de la lecture des répertoires n'ayant pas de fichiers index.(htm,html,php)
Options -Indexes

Les lignes commençant par # sont des commentaires. Elles peuvent être effacées, ainsi que les lignes vides. Le code ci-dessous aura le même effet.

DirectoryIndex index.htm index.php index.html
Options -Indexes

Notons que les noms (index.htm index.php index.html) sont séparés par un espace (et non une virgule).

Après ce placement, s'affichera :

Tout dossier contenant un fichier index.htm ou index.php ou index.html sera alors protégé. Théoriquement, cela suffit. Mais, si ce fichier était déplacé ou renommé, la protection disparaît. Notons que, durant le remplacement du fichier .htaccess (durant quelques secondes), le site redevient vulnérable.

Via index.htm

Pour renforcer la sécurité, tout dossier devrait contenir un fichier index.htm, même totalement vide. Ainsi, même en l'absence (temporaire ou non) du fichier .htaccess, chaque dossier est protégé (du listing)

Complexifier le nom du dossier

Après ce premier niveau de protection, le hacker n'aura plus accès au listing des fichiers contenu dans le dossier, mais il pourrait aussi deviner le nom du fichier ... Et, s'il est au courant que les administrateurs se sont réunis le 3 mars 2020, il pourrait taper dans la barre des URL : http://www.entreprise.com/documents/reunion_3mars2020.pdf

Certes, c'est beaucoup plus difficile que deviner un nom de dossier, mais cela reste humainement possible pour un obstiné.

LA solution. Ajouter au nom "naturel" du dossier 5 caractères aléatoires. Voir alea.htm

Authentifier le visiteur

Pour obliger le visiteur à s'authentifier pour accéder à un dossier d'un site web, il suffit de créer deux fichiers :

  1. .htaccess
  2. .htpasswd

Pré-requis

Web opaque

Le responsable de la sécurité d'un site est le webmaster. Généralement, on ne tape que l'URL de la page d'accueil du site, ensuite on surfe. On ne voit alors que ce que le webmaster vous autorise à voir.

Mais, il existe très souvent des parties du site qui sont cachées au public. Souvent, il existe des dossiers nommés : "admin/", "images/", "private/",  ... Or, atteindre n'importe quel fichier en tapant son URL est le comportement normal d'un navigateur. Il est alors facile d'aller là où normalement vous ne devriez pas aller et parfois découvrir des choses ...

Bref, en surfant un site internet, vous ne voyez que la "partie visible de l'iceberg". Il existe donc une partie invisible. Il s'agit de la partie du web inconnue des moteurs de recherche (et souvent licite). Il s'agit du web opaque, appelé aussi web profond ou, en anglais, deepweb (à ne pas confondre avec le darknet aux contenus souvent illicites)

Les moteurs de recherche peuvent trouver tous les fichiers liés au fichier HTML analysé, tel que les images, les fichiers mis en téléchargement, ...

La façon la plus simple de protéger un fichier - mais la plus dangereuse (car elle donne l'illusion de la sécurité) - est donc de plonger dans ce web opaque en donnant comme nom à vos fichiers des codes, tel que 0e32762970c4b4ecaf4d8c48cf1683106cce7fe9.htm et veiller à ce que fichier ne soit pas connu que des seules personnes autorisées (idéalement à personne d'autre que vous et votre hébergeur).

Créer un site opaque - non connu des moteurs de recherche - est donc possible. Le nom du fichier pourrait être index19630429.htm (index suivi d'une date de naissance d'une connaissance). Mais l'anonymat peut facilement être rompu. En effet, il suffit que l'URL d'un seul fichier de ce site opaque soit publié, une seule fois durant quelques secondes, pour que tous les fichiers soient connus d'un moteur de recherche et rendus publics !

N'oubliez pas que votre hébergeur a accès à tous vos fichiers et qu'il collaborera avec la police. Seuls des fichiers cryptés pourraient vous protéger. Cependant, refuser de les décrypter, si la police vous le demande, est passible de prison.

index.htm

La façon la plus simple - mais la moins sûre - de protéger un dossier est d'y placer un fichier (vide) appelé index.htm. Résultat : le contenu du dossier ne sera plus listé lors d'un appel d'un fichier inexistant dans ce dossier.

Heureusement, par défaut, les hébergeurs configurent le serveur Apache pour qu'une telle faille de sécurité n'existe pas. Premièrement, lorsqu'on appelle un dossier, l'URL appelée est automatiquement remplacée par ce dossier/nomDuFichierParDefaut. Ce nomDuFichierParDefaut est souvent : index.htm, index.html ou index.php. Deuxièmement, lorsque le fichier appelé n'existe pas, un message s'affiche. De plus, beaucoup de développeurs personnalisent la réponse du serveur lorsque le fichier appelé n'existe pas.

Le dossier de cette page contient un sous-dossier appelé "private/" qui contient un fichier secret.txt qui contient un mot de passe. Trouvez-le et notez le. Il vous servira bientôt.

Modifiez l'URL qui s'affiche actuellement dans la barre de navigation.
Remplacez htpasswd.htm par private/secret.txt

Bien que moins sûre via deux fichiers spéciaux, la méthode du fichier index.htm (vide) restera votre protection en cas d'erreur au niveau des fichiers spéciaux ou de leur suppression accidentelle.

.htaccess

Premier fichier spécial, dont le contenu est, par exemple :

AuthType Basic
AuthName "Partie réservée aux amis"
AuthUserFile chemin/.htpasswd
Require valid-user

Le chemin/ est fourni par votre hébergeur.
Ou, via un fichier PHP (si votre site est dynamique)

<?php /* placez ce fichier dans le dossier que vous voulez protéger */
 echo realpath("chemin.php"); /* même nom que ce fichier */
?>

L'appel de fichier PHP affichera xxx/yyy/chemin.php
Dans le fichier .htaccess, chemin/ est à remplacer par xxx/yyy/

"Partie réservée aux amis" peut être remplacé par n'importe quelle chaîne de caractères (ne contenant pas de (")). Par exemple, par : "Partie privée de mon site"

Enregistrez, sur votre disque dur, le contenu sous "htaccess.txt" (codé en ANSI)

Les instructions données dans ce fichier s'appliqueront aussi à tous ses sous-dossiers. Ce fichier peut contenir de nombreuses instructions. Il ne sert pas uniquement à indiquer l'adresse du fichier de mots de passe.

.htpasswd

Pour créer ce fichier spécial contenant le nom et le mot de passe des utilisateurs autorisés, visitez la page http://www.htaccesstools.com/htpasswd-generator/, remplissez les deux champs, puis cliquez sur le bouton.

Indiquez dans le premier champ : test
dans le second champ : secret

S'affichera la ligne suivante :

test:$apr1$wYqKyXHw$ob8X95fKehOcLt708bZcx1

Ce qui précède les deux-points est le nom d'utilisateur.
Ce qui suit est le mot de passe crypté.
NB : Rien ne vous interdit de donner les mêmes codes à des plusieurs personnes
Toutefois, pour créer plusieurs accès, créez autant lignes que de codes différents.

Enregistrez cette ligne, sur votre disque dur, dans un fichier nommé "htpasswd.txt" (codé en ANSI)

Dans le dossier à protéger

Via le logiciel FTP, uploadez "htaccess.txt" et "htpasswd.txt" dans le dossier à protéger.
Puis, renommez ces deux fichiers en plaçant un point devant leur nom et en supprimant ".txt".

Sur le serveur, le fichier "htaccess.txt" devient donc ".htaccess"
et le fichier "htpasswd.txt" devient ".htpasswd"

Ces deux noms spéciaux - ".htaccess" et ".htpasswd" - ont une signification pour le serveur Apache et doivent donc être tapés exactement comme indiqué ci-dessus.

Test

Le dossier de cette page contient un sous-dossier appelé "private2/" qui contient un fichier "secret2.htm" qui contient un message secret. Cliquez ici pour le découvrir.

Cette fois-ci, avant de consulter un fichier situé dans le dossier protégé, il vous faudra fournir les codes d'accès !

Le premier code est "test" et le second est celui contenu dans le fichier "secret.txt" situé dans le dossier non protégé private/ (que vous avez déjà noté). Si vous cliqué sur le bouton "Annuler", un message est affiché. Il ne vous reste plus qu'à faire demi-tour (= cliquer sur le bouton "Page précédente" de votre navigateur).

L'apparence de la fenêtre affichant les deux champs dépend du navigateur.

https

L'envoi de données via un formulaire (mot de passe, ...) devrait utiliser le protocole HTTPS

Liens