.htaccess, petit par la taille, très puissant par la configuration

Poursuite des réglages de mon site avec un enrichissement de ce mal aimé qu’est le fichier .htaccess. Sans être un spécialiste, j’aime bien paramétrer dans le détail la configuration du serveur au niveau des répertoires. Et lorsque j’arrive à trouver le temps de travailler proprement, je m’efforce de bien séparer ce qui relève de la…

Le Caravage - L'incrédulité de Saint Thomas. Saint Thomas enfonce son doigt dans la plaie de Jésus car il ne croit pas en la résurection.
Le Caravage – L’incrédulité de Saint Thomas (détail) 1603. Licence : domaine public. Photographe : Google Arts & Culture

Alors si lorsque je vous parle Apache, vous visualisez Sitting Bull et lorsque je vous dis « htaccess » vous entendez « achetez accès » n’allez pas plus loin. Ou sinon il est préférable de lire à minima cet article. Et si cela ne vous parle toujours pas, ne faites rien, c’est mieux. Vraiment.


Deux règles d’or :

  • La sécurité nous concerne tous. Ce n’est pas parce que c’est un blog-note sans audience ni prétention qu’il faut laisser la porte grande ouverte. Déjà parce que j’utilise WordPress, donc techniquement j’ai plus de probabilité d’avoir un jour un problème 1. Aujourd’hui plus de la moitié du trafic web est généré par des bots et un tiers du trafic mondial serait généré par des logiciels malveillants 2. Donc il suffit qu’un robot trouve une petite fenêtre ouverte, il va rentrer et tout planter.
  • La sécurité, c’est anticiper le jour d’après. Qu’importe votre situation, un jour vous allez avoir un problème. Donc on s’organise : on conserve une copie des clés, on planifie des sauvegardes régulières. Et on cloisonne ses différentes activités, ainsi que sa vie personnelle et professionnelle.

Bon maintenant voici quelques règles que j’applique au niveau de mon fichier principal .htaccess pour minimiser le risque.

Ne pas laisser la porte d’entrée visible

Chaque CMS a un chemin « classique » pour se connecter. Sur WordPress il suffit de rajouter /wp-admin, sous Drupal c’est /user/login, avec Joomla c’est /administrator et ainsi de suite.

Il n’est pas forcément très utile de laisser celle-ci visible, donc je ne déplace pas les fichiers mais j’impose un mot de passe particulier dans l’url, et si cette condition n’est pas remplie, je bascule l’indésirable vers une vidéo youtube.

J’avais vu ce bout de code il y a un peu plus de 10 ans chez Gonzague.

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp\-login\..*
RewriteCond %{QUERY_STRING} .*mdp=.*
RewriteRule ^.* /wp-admin/ [cookie=mdp:true:347degres.fr:3600:/,R,L]
RewriteCond %{REQUEST_URI} ^/wp\-login\..* [OR]
RewriteCond %{REQUEST_URI} ^/wp\-admin/.*
RewriteCond %{HTTP_COOKIE} !\bmdp\b
# Mauvais cookie , vas t'en écouter un peu de flute à bec
RewriteRule ^.* https://www.youtube.com/watch?v=X2WH8mHJnhM [R,L]

Je vous laisse mettre votre mot de passe et l’url de votre site à la place.

La conséquence est assez simple, si vous essayer de vous connecter selon le chemin classique /wp-admin, vous allez avoir droit à un petit concert de flûte à bec plutôt sympa. Et sinon il faut avoir le lien suivant :

https://votrenomdedomaine.fr/wp-admin/mdp=votre mot de passe

Interdire l’accès au fichier .htaccess

Cela peut sembler évident, mais vu que nous allons charger ce fichier pour assurer sa protection, on va faire en sorte que celui-ci ne soit pas accessible et on en rajoute une couche en empêchant toute modification.

# Protéger le fichier .htaccess
<Files .htaccess>
    Order Allow,Deny
    Deny from all
</Files>

# Bloquer les tentatives de modification du fichier .htaccess
<Files ~ "^.*\.([Hh][Tt][Aa])">
    Order allow,deny
    Deny from all
</Files>

Empêcher la navigation dans les fichiers

Il est assez facile avec une url vers un fichier ou une image de se déplacer dans l’ensemble des fichiers en ligne. Pas top. Alors on interdit tout cela.

# Désactiver la navigation dans les répertoires
Options -Indexes

# Interdire l'accès aux fichiers sensibles
<FilesMatch "\.(bak|log|sql|sh|inc|swp|dist)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>

# Limiter l'accès au fichier xmlrpc.php
<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
</Files>

# Bloquer les accès non-autorisés aux dossiers wp-includes et wp-content
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^wp-admin/includes/ - [F,L]
    RewriteRule !^wp-includes/ - [S=3]
    RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
    RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
    RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

Après, il y a beaucoup de réglages possibles, des très bons plugins, et surtout il est toujours préférable de ne pas trop s’étendre en ligne sur la sécurité.

  1. Au printemps 2024, 43,2 % des sites web de la planète utilisent WordPress
    Rien que pour ça, faire tourner sous Spip ou drupal expose beaucoup moins. ↩︎
  2. Et avec l’IA, ce n’est pas 2% de croissance qu’on va se prendre l’année prochaine. Rendez-vous dans 5 ans, je vous prédis que le trafic malveillant occupera 75% du web. ↩︎