.htaccess et WordPress: Cause commune pour la sécurité de votre blog

Le fichier .htaccess est un fichier de configuration des serveurs Apache, qui permet de définir des règles sur votre site web, telles que rediriger les utilisateurs, protéger la zone d’administration avec un mot de passe, protéger certains répertoires, changer le nom ou l’extension de la page index, ou encore interdire l’accès aux répertoires, etc.

Avec le temps, le fichier .htaccess est devenu une nécessité pour tous les sites et il prend tout son sens dans de nombreux cas. Je vais vous donner quelques exemples d’utilisation du fichier .htaccess avec WordPress.

htaccess et wordpress

.htaccess & Wordpress: Un couple bien assorti

Avant de commencer, je vous recommande de faire une copie de sauvegarde de votre fichier .htaccess, afin de pouvoir revenir à l’ancienne version en cas de nécessité, ce n’est pas un luxe, alors faites une copie de sauvegarde.

Nous avions déjà abordé le fichier .htaccess dans l’article 5 étapes pour sécuriser votre site avec .htaccess, mais cette fois ci nous irons un peu plus loin.

Quelle est la structure typique d’un  fichier .htaccess dans WordPress?

Par défaut, le fichier .htaccess se trouve dans le répertoire racine de votre site WordPress, vous pouvez donc faire des changements « en live« , mais c’est toujours très risqué, aussi je vous suggère fortement de ne pas le faire. Faites vos essais sur un site de tests.

Pour la plupart des utilisateurs, le fichier .htaccess ressemble à ceci:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Voici l’explication de chaque ligne:

  1. Sert uniquement de commentaire et montre que ces entrées sont utilisées par WordPress.
  2. Le module mod_rewrite est chargé,  s’il est installé.
  3. Le serveur attribue la permission de procéder à la réécriture des URL.
  4. Ajoute un « / » à l’URL si nécessaire
  5. Si le fichier index.php est appelé, rien ne se passe (afin d’éviter des boucles ininterrompues, [L] casse un traitement plus de règles à partir).
  6. Vérifie si un fichier est spécifié
  7. Vérifie si un répertoire est spécifié
  8. Si l’une des deux règles précédentes est adaptée, index.php est ajouté dans la barre d’adresse.
  9. Désactivation du module mod_rewrite, activé à la ligne 2
  10. Et pour finir un commentaire qui peut être ignoré.

Vous connaissez à présent la fonction de base et la structure du fichier .htaccess de WordPress. Passons à la suite.

Pourquoi vous ne trouvez pas de fichier .htaccess?

La raison la plus courante est que votre site WordPress n’a pas encore généré de fichier .htaccess. WordPress génère le fichier .htaccess, pour la première fois, lorsque vous configurez les permaliens. Tout ce que vous avez à faire est de cliquer sur le bouton Enregistrer les modifications sur l’écran de permaliens (Réglages -> Permaliens) et WordPress générera un fichier .htaccess dans le répertoire racine de votre site.

ecran permaliens

En de rares occasions, WordPress ne peut pas générer le fichier .htaccess en raison d’un problème d’accès aux fichier .htaccess.

Dans ce cas, WordPress afficher une alerte, au bas de l’écran de la fenêtre Permaliens, vous informant que le fichier .htaccess n’est pas accessible en écriture. Si vous avez configurez vos permaliens pour utiliser d’autres paramètres que les paramètres par défaut, il affichera le code que vous devrez coller dans votre fichier .htaccess.

htaccessfile-writable

Vous devrez copier et coller ce code dans un éditeur de texte comme Notepad++, et enregistrer le fichier sur votre bureau en le nommant .htaccess. Ensuite, connectez vous à votre site Web en utilisant un logiciel FTP, ou le gestionnaire de fichiers de votre hébergeur, et téléchargez ce fichier, depuis votre bureau pour le mettre dans le répertoire racine de votre site.

Exemples d’utilisation du fichier .htaccess avec WordPress

sécuriser-accès

1- Protéger .htaccess (Pour mémoire)

En raison des contrôle que le fichier .htaccess a sur l’ensemble de votre site Web, il est important de protéger ce fichier des utilisateurs non autorisés. Le code ci-dessous empêchera les pirates, et les curieux, d’accéder à votre fichier .htaccess.

Vous pourrez, bien sûr, toujours modifier le fichier vous-même via FTP ou le gestionnaire de fichiers de votre hébergeur.

<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

2 – Protéger wp-config.php (Pour mémoire)

L’un des fichiers les plus importants de votre installation WordPress est le fichier wp-config.php.

Le fichier wp-config se trouve à la racine de votre répertoire WordPress, comme le fichier .htaccess, et contient les détails de la configuration de votre site, tels que les informations de connexion à la base de données, vos clés de sécurité WordPress, etc. Ces information, sont sensibles et si quelqu’un peut y accèder, il risque de détruire votre site.

Vous pouvez protéger le fichier wp-config.php en ajoutant les lignes suivantes à votre fichier .htaccess:

#Proteger wp-config
<files wp-config.php>
order allow,deny
deny from all
</files>

3- Restreindre l’accès à la zone d’administration

L’augmentation des attaques de type Force Brute oblige les propriétaires de site WordPress à bloquer l’accès à la page de connexion WordPress. Les robots sont de plus en plus efficaces, aussi ils vous faut redoubler de prudence

# Auth protect wp-login.php
<Files wp-login.php>
AuthName "Restricted Admin-Area"
AuthType Basic
AuthUserFile ~/.htpasswd
Require valid-user
</Files>

Il est nécessaire de créer un autre fichier, qui peut être dans le même répertoire. Ce fichier, que vous appelerez .htpasswd, doit contenir le nom de l’utilisateur et un mot de passe crypté. Je vous recommande d’utiliser le générateur htpasswd pour l’encodage de mots de passe du site Aspirine.orghtpasswrd generator

Quand vous tenterez d’accéder à wp-admin ou wp-login.php, une invite vous demandera de saisir votre nom d’utilisateur et votre mot de passe avant de vous laisser accéder à la page de connexion.

# Interdit access aux fichiers importants
<FilesMatch "(\.htaccess|\.htpasswd)">
Order deny,allow
Deny from all
</FilesMatch>

Vous pouvez, bien entendu, ajouter plusieurs utilisateurs dans le fichier .htpasswd, en ne mettant qu’un seul utilisateur par ligne. Ceci a pour avantage que chaque éditeur ou administrateur peut se connecter avec ses informations de connexion.

4- Bloquer les rapports d’erreur PHP

Dans les blogs WordPress, il est assez facile de créer, sans le vouloir, une erreur PHP et ainsi générer un rapport d’erreur contenant  le chemin d’accès vers votre blog sur le serveur d’hebergement, sans être un administrateur ou un expert.

L’appel de certains fichiers de base ou de plugin WordPress dans la barre d’adresse du navigateur crée des erreurs PHP fatales (parce que les fonctions de WordPress nécessaires et référencées sont absentes). Si les paramètres du serveur ou de PHP permettent l’affichage des erreurs, elles apparaîtront dans le navigateur.

Presque personne ne peut décrypter les rapports d’erreurs, mais ils contiennent de précieuses informations pour les pirates et cela leur permet de trouver des failles et d’en faire pleinement usage.

Résolvez ce problème en ajoutant le code suivant dans le fichier .htaccess:

php_flag display_errors Off

Protéger le répertoire wp-content

5- Protéger le répertoire wp-content

Le répertoire wp-content est l’une des zones les plus importantes de votre site WordPress. C’est l’endroit où se trouvent les fichiers vitaux tels que vos thèmes, plugin, images et vidéos téléchargées, ainsi que les fichiers de cache.

Vous pouvez lutter contre ces menaces en créant un fichier .htaccess séparé et en y ajoutant le code suivant:

#Proteger le repertoire wp-content
Order deny,allow
Deny from all
<Files ~ ".(xml|css|jpe?g|png|gif|js)$">
Allow from all
</Files>

Il faut ensuite télécharger ce fichier .htaccess séparé dans le répertoire principale de « wp-content« , c’est à dire « http://www.votre-site-web.fr/wp-content/« . En faisant cela, vous ne permettrez que le chargement des fichiers de type XML, CSS, JPG, JPEG, PNG, GIF et Javascript. Tous les autres types de fichiers seront refusés.

6- Bannir quelqu’un de votre site

Si vous connaissez l’adresse IP d’un tiers malveillant, vous pouvez lui interdire complètement l’accès à votre site en utilisant le code ci-dessous. Vous pourriez, par exemple, bannir une personne qui ne laisse que des commentaires abusifs ou une personne qui a tenté d’accéder à votre espace d’administration

#Bannir une personne de votre site
<Limit GET POST>
order allow,deny
deny from 123.456.789.0
deny from 987.654.32.1
allow from all
</Limit>

7- Rediriger une URL

La redirection 301 vous permet d’informer les moteurs de recherche qu’une URL a changé de façon permanente vers un nouvel emplacement. Elles peuvent aussi être utilisées pour rediriger une page, un dossier ou même la totalité d’un site.

Les redirections sont donc utilisées à chaque fois que l’URL d’une page change. Cela peut être dû à un changement de domaine, au changement de la structure des permaliens de votre site, etc.

Pour effectuer une redirection, tout ce que vous avez à faire est d’ajouter une ligne avec une redirection 301, suivi de l’ancien emplacement et du nouvel emplacement. Vous pouvez voir comment cela fonctionne dans la pratique ci-dessous:

#Rediriger une URL
Redirect 301 /ancienne-page.html http://www.yourwebsite.com/nouvelle-page.html
Redirect 301 /ancien-dossier/page2.html /nouveau-dossier/page2.html
Redirect 301 / http://www.mon-nouveau-site.fr/

8- Activer le cache du navigateur

Le cache du navigateur, une fois activé, permettra au navigateurs de vos visiteurs d’enregistrer, automatiquement, certains éléments de votre page Web de sorte qu’ils ne devront pas être à nouveau téléchargés.

Le cache du navigateur est utilisé pour enregistrer des éléments tels que les feuilles de style CSS et les fichiers multimédias, tels que les images. C’est une solution pratique car lorsqu’une image est téléchargée depuis un site Web, l’image est rarement mise à jour ultérieurement.

Le cache du navigateur permet donc aux visiteurs de charger l’image enregistrée sur leur ordinateur, plutôt que depuis votre serveur. Cela réduit la bande passante et diminue les temps de chargement.

Pour activer la mise en cache, il suffit d’ajouter le code ci-dessous à votre fichier .htaccess:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>

## EXPIRES CACHING ##

9- Bloquer l’accès aux fichiers d’inclusions

Certains fichiers ne doivent pas être consultés par les utilisateurs. Vous pouvez bloquer l’accès à ces fichiers en ajoutant le code suivant à votre fichier .htaccess:

# Bloquer l'accès aux fichiers d'inclusions
<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>

10- Bloquer les mauvais robots

Les Bots, raccourcis pour robots, sont des programmes informatiques qui surfent sur tous les sites web et effectuent automatiquement des tâches spécifiques. Comme partout dans le monde, sur Internet, il y a des gentils bots et de mauvais bots.

Bloquer les mauvais robots

Les gentils bots sont utilisés par les moteurs de recherche, tels que Google et Yahoo, pour explorer votre site web, et utiliser les informations collectées afin de classer votre site dans les résultats des moteurs de recherche.

Les mauvais bots sont généralement utilisés pour récolter des adresses email depuis les sites Web, ces adresses étant ensuite utilisées par les spammeurs. Les mauvais bots sont également utilisés pour trouver des failles de sécurité dans les sites Web. Lorsque des vulnérabilités sont trouvées par ces mauvais robots, elles sont ensuite exploitées par des pirates.

Les trois principales raisons de protéger WordPress des mauvaises bots sont:

  • le spam
  • la bande passante, qui vous coûte de l’argent
  • la sécurité WordPress

Dans l’exemple ci-dessous, nous allons bloquer un mauvais bot nommé evilbot avec la chaîne user-agent.

# Bloquer le robot evilbot
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^evilbot
RewriteRule ^(.*)$ http://no.access/

Le code ci-dessus vérifie le user-agent du bot, et si il correspond, il sera redirigé vers un site Web qui n’existe pas : http://www.no.access/.

Si vous souhaitez empêcher plusieurs robots d’accéder à site votre WordPress, utilisez l’opérande [OR] et ajoutez une ligne pour chaque mauvaise bot que vous souhaitez bloquer.

#Bloquer plusieurs mauvais robots
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^evilbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^spambot [OR]
RewriteCond %{HTTP_USER_AGENT} ^virusbot
RewriteRule ^(.*)$ http://no.access/

Enfin, et non des moindres

Vous devez également bloquer certains fichiers importants pour la simple raison que vous êtes la seule personne qui a besoin d’accéder à ces fichiers. Ce dernier code protègera votre site web des attaques à base d’URL. J’utilise ce code pour tous mes sites.

# ----------------------------------------------------------------------
# Paramètres de sécurité
# ----------------------------------------------------------------------	

#Block important files from outside access
<files install.php>
Order allow,deny
Deny from all
</files>

# PROTECT readme.html
<files readme.html>
 Order Allow,Deny
 Deny from all
 Satisfy all
</Files>

<files error_log>
Order allow,deny
Deny from all
</files>

# Block URL based exploits 
RedirectMatch 403 \[
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Ban double slashes in all URLs 
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(([^/\ ]+/)*)/+([^\ ]*)
RewriteRule ^ /%1%3 [L,R=301]
</IfModule>

.htaccess offre de nombreuses options

Comme vous le voyez, le fichier .htaccess est un outil puissant, qui vous donne de nombreuses façons de contrôler le comportement de votre site WordPress.  Si vous êtes à la recherche de plus d’exemples de codes pour le fichier .htaccess, vous pourrez en trouver sur la page GitHub de Phanan.

PS: Si vous vous êtes demandé, lors de la lecture, pourquoi il y a un « . » avant le nom du fichier .htaccess, c’est parce qu’il s’agit un héritage du monde Unix.

Mise à jour le 26/10/2015: Pour tous ceux qui souhaiteraient aller plus loin avec .htaccess, je vous suggère de lire l’excellent article Le guide ultime du fichier .htaccess dans WordPress, complété par un guide gratuit, le tout écrit par Alex Bortolotti du site WPMarmite.

séparateur de texte

Cet article vous a été utile? Partagez le pour en faire profiter plus de monde. Merci!

Publié à l'origine le : 30 juin 2015 @ 12 h 06 min

Pour compléter votre lecture.