Comment sécuriser son blog
Nous verrons dans cet article comment sécuriser son blog sous WordPress, mais les principes restent applicables pour d’autres CMS.
La protection des répertoires
Votre site web s’affiche selon la structure de vos fichiers et dossiers présents à partir de la racine web appelée la racine web ou « web root directory » en anglais.
Il s’agit généralement du répertoire (sous Linux) /var/www/ ou encore /home/www/
Cette racine du site s’affiche donc par un « / » final dans votre URL :
Exemple : www.site.fr/ correspond au contenu présent dans /var/www/
Le fichier accueil.html contenu dans le dossier d (/var/www/d/accueil.html) s’affiche donc ainsi via l’URL : www.site.fr/d/accueil.html
Et où est le problème avec ça ?
Le problème, c’est que par défaut si vous naviguez vers : www.site.fr/d/ vous affichez tous les fichiers et dossiers qu’il contient, sans même forcément le savoir.
Et n’importe quel internaute peut décider de l’afficher même si vous ne donnez ce lien spécifique à personne.
Exemple :
A cela près qu’un index.php ou .html s’affichera automatiquement s’il est présent dans le dossier concerné. On appelle cela le Directory Index.
Dans l’exemple ci-dessus, si j’ajoute un fichier index.php ou .html, c’est lui qui s’affichera automatiquement sans lister le contenu.
Veillez donc à placer des fichiers index.html même vides dans un dossier dont vous souhaitez masquer le contenu.
Attention : cela ne suffit pas à rendre inaccessible les différents fichiers du dossier ! Par exemple dans la capture d’écran précédente, motsdepasse.txt RESTE accessible via https://site.fr/d/motsdepasse.txt (si l’on utilise le lien direct). La seule « sécurité » ici est de maquer la liste des fichiers/dossiers.
Un autre moyen pour éviter le listing des fichiers/dossiers est l’utilisation d’un fichier .htaccess :
Le fichier .htaccess est un fichier de configuration du serveur web Apache et permet de gérer les accès, les redirections, les messages d’erreur etc.
Ainsi pour limiter les accès à tous les dossiers, on peut placer à la racine web un fichier .htaccess, et y mettre :
Options -Indexes ErrorDocument 403 http://www.site.fr/403.html
Options -Indexes demande de ne pas afficher le contenu des dossiers. Cette option génère une erreur 403 Forbidden à l’utilisateur qui essaie d’y accéder.
D’où la deuxième ligne qui indique une page personnalisée à afficher, vous pouvez donc indiquer votre message dans cette page qui sera renvoyée en cas d’erreur 403.
Enfin, un autre souci se pose : c’est l’indexation par les moteurs de recherche. Si vous faites par exemple un lien vers l’un des fichiers du dossier à protéger comme on l’a vu… Google par exemple connaîtra le lien direct vers le fichier en question… Et le proposera à qui le cherche sur son moteur de recherche.
En fait, c’est Google lui-même qui peut à la longue indexer vos fichiers et donc permettre l’accès direct à ceux-ci en connaissant leurs noms !
Comment savoir si Google index mes fichiers « secrets » ?
Jetez un œil à mon article sur Google, vous pouvez utiliser des expressions du type:
« www.site.fr/d/* » pour afficher tous les fichiers gentiment indexés par Google.
Deux solutions sont envisageables pour éviter cela :
- Utiliser la balise
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
dans vos fichiers php ou html pour indiquer à Google de ne pas indexer ces fichiers spécifiques.
- Créer un système de lien temporaire valable que quelques minutes (comme pour la plupart des sites de téléchargement)
Peut-on faire mieux ?
Les solutions pour empêcher complètement l’accès, même en connaissant le lien/nom du fichier est de le sécuriser par un mot de passe… ou de le sortir de du dossier racine du site web… ou les deux.
La sécurisation par mot de passe peut se faire un créant simplement un fichier .zip du contenu. On ajoute un mot de passe au fichier .zip lors de sa création et c’est terminé.
Ou alors on utilise à nouveau notre .htaccess en compagnie cette fois d’un fichier .htpasswd.
Le fichier .htpasswd (à placer dans le dossier à protéger) contiendra un couple « nom d’utilisateur » et « mot de passe », séparés par un double point, comme :
utilisateur:$apr1$op0zq72u$Dci.rSdoBcLRnWxEgyp/41
Le contenu après les doubles points est un hash du mot de passe « mdp ». Vous pouvez utiliser des « générateurs de htpasswd » pour vous aider.
Enfin, il ne reste qu’à créer un .htaccess dans le dossier à sécuriser et de référence le fichier .htpasswd :
AuthName "Zone réservée" AuthUserFile /var/www/site/d/.htpasswd #à adapter AuthType Basic Require valid-user
Sécuriser son site web ne s’arrête (malheureusement ?) pas là !
Nous venons de démontrer un seul point (protection des répertoires) sur… beaucoup !
Il n’est pas possible de noter toutes les possibilités d’exploitation et de protection existantes et de les maintenir à jour dans un seul article de blog.
C’est pour cela que je préfère « apprendre à l’homme comment pêcher plutôt que de lui donner un poisson ». En somme, ce sera par l’apprentissage des failles web et la mise en pratique avec de vrais sites volontairement vulnérables que l’on pourra maîtriser les différents aspects de la sécurité web.
J’ai cependant commencé à écrire quelques tutoriels pour différentes failles web dont voici les liens en guise de suite à cette article :
- Se protéger de la faille LFI (Local File Inclusion)
- Se protéger de la faille XSS (Cross-site scripting)
- La faille CSRF, explications et contre-mesures
- Se protéger de l’injection SQL
- Se protéger de la faille RFI (Remote File Inclusion)
- Le cours vidéo complet sur les failles web