Sécuriser WordPress .htaccess

  Cet article date du 29 décembre 2013 et commence à dater, le contenu peut être obsolète !

WordpressLe .htaccess est un fichier qui sert à indiquer des commandes au serveur apache, voici le récapitulatif de ce que j’ai trouvé utile pour sécuriser WordPress. Tout d’abord si vous obtenez une Erreur 500 (Internal Server Error) c’est que votre serveur apache n’ai pas bien configuré,  il faut vérifier du côté de /etc/apache2/site-available/default et vérifier que Allowoverride est réglé en All.

( Pour en savoir plus sur le .htaccess ça se passe ici )

<Directory /VOTRE_DOSSIER>
Allowoverride All
</Directory>

Sécuriser le dossier WP-ADMIN

# DEBUT
order deny,allow
deny from all
# Liste Blanche - Adresse IP Maison
allow from xxx.xxx.xxx.xxx
# Liste Blanche - Adresse IP Travail
allow from xxx.xxx.xxx.xxx

<Files admin-ajax.php>
 Order allow,deny
 Allow from all
 Satisfy any
</Files>
# FIN

Le premier bloque empêche l’accès à la partie admin (back-end) sauf pour les adresses ip connues, vous pouvez remplacer xxx.xxx.xxx.xxx par votre adresse ip perso ainsi que celle de votre travail et en ajouter autant que vous le désirez. ( Pour connaitre votre adresse ip vous pouvez vous rendre ici : http://www.mon-ip.com/ ).

Le second bloque corrige les problèmes d’Ajax qui seront occasionnés si vous protégez votre dossier admin,
cela cassera les fonctionnalités Ajax utilisées dans la partie publique de votre site (front-end) si vous en utilisez.
Le code laissera admin-ajax.php autorisé pour tous.

Sécuriser le dossier WP-CONTENT

Ce dossier contient les thèmes, les plugins, les images, etc… C’est un dossier qu’il faut absolument protéger, pour cela il faudra créer un .htaccess dans le dossier wp-content avec le code plus bas qui permettra de laisser l’accès au contenu qui doit être lu par les utilisateurs sauf les fichiers .php qui sont des fichiers important.

# Securité du dossier WP-CONTENT
Order deny,allow
Deny from all
<Files ~ ".(xml|css|jpe?g|png|gif|js|woff|eot|ttf|ico|svg|pdf|gzip)$">
 Allow from all
</Files>

La liste des extensions peut très bien s’allonger en ajoutant un pipe (la barre droite du clavier via Alt Gr + 6) suivie de l’extension à autoriser par exemple vous pouvez très bien rajouter : mp3, flv, swf, etc… Si vous utilisez des plugins pour améliorer les performances de votre site comme W3 Total Cache et que vous activez la compression des pages il est impératif d’autoriser .gzip comme dans l’exemple.

J’ai remarqué qu’un de mes plugins qui s’ouvrait en popup dans la zone d’édition d’un article ne fonctionnais plus cela est dû au fait que l’on bloquait l’accès aux fichiers .php j’ai donc autorisé l’adresse ip du serveur ou alors l’adresse local à accéder aux fichiers .php avec le code suivant à ajouter juste après celui écrit plus haut.

<Files ~ ".(php)$">
 Allow from xxx.xxx.xxx.xxx
</Files>

Remplacez xxx.xxx.xxx.xxx par l’ip de votre serveur ou par 127.0.0.1 l’adresse de loopback.

Sécuriser la racine de votre site

Dans le fichier .htaccess ajoutez après # END WordPress le code suivant :

# DEBUT
# Désactive le listing des fichiers dans le dossiers
Options All -Indexes
#Protege wp-config.php
<Files wp-config.php>
 order allow,deny
 deny from all
</Files>
# Limite l'accès à votre fichier .htaccess
<Files ~ "^.*\.([Hh][Tt][Aa])">
 order allow,deny
 deny from all
 satisfy all
</Files>
# FIN

Tout est expliqué avec un commentaire avant chaque bloque vous pouvez aussi ajouter ce code :

# Permet d’accéder à la page de login avec une url avec login à la fin
RewriteRule ^login$ http://suivezlegeek.fr/wp-login.php [NC,L]
# Permet d’accéder au back-office avec une url avec admin à la fin
RewriteRule ^admin$ http://suivezlegeek.fr/wp-admin/ [NC,L]

Exemple : http:\\MON_URL\login ou http:\\MON_URL\admin

La partie pour limiter l’accès au fichier .htaccess peut être ajouté au fichier .htaccess dans wp-admin et dans celui de wp-content.

Bannir des adresses ip

Il suffit d’ajouter dans le .htaccess qui est à la racine de votre site les lignes suivante :

<Limit GET POST>
order allow,deny
deny from xxx.xxx.xxx.xxx
allow from all
</Limit>

Pensez à remplacer xxx.xxx.xxx.xxx par l’adresse ip à bannir, vous pouvez bannir d’autres adresses en rajoutant la ligne deny from xxx.xxx.xxx.xxx en dessous de celle existante.

Cacher la version du serveur Apache en cas d’erreur 404

Un serveur apache mal sécurisé affichera lors de l’accès à une page inexistante (Not Found) la version du serveur apache dans le footer, pour cacher l’info ajoutez le code suivant :

# Masquer les informations du serveur
ServerSignature Off

Bloquer l’accès à un fichier de votre choix

Si vous souhaitez bloquer l’accès à un fichier vous pouvez adapter ce code en changeant ici important.txt.

# Protége le fichier important.txt
 <files important.txt="">
 order allow,deny
 deny from all
 </files>

Bloquer l’accès à l’editeur intégré au backoffice

En vous connectant à votre interface d’administration vous avez dans le menu Apparence -> Editeur et Extensions -> Editeur la possibilité de modifier le code ce qui n’est pas génial si quelqu’un parviens à se connecter il pourra injecter du code, il est préférable d’éditer ses fichiers en local et de les envoyer via ftp. Pour bloquer cette fonctionnalité éditez wp-config.php et ajoutez la ligne suivante :

define('DISALLOW_FILE_EDIT',true);

Quelques conseils rapide :

  • Ne pas utiliser un login nommé admin cible préférée pour les tentatives de connexions
  • Avoir un WordPress toujours à jours de même pour les plugins
  • Avoir le minimum possible de plugins
  • Changer les permissions avec votre client ftp 600 pour wp-config.php et 604 pour les .htaccess
  • Limiter le nombre de tentative de connexions avec un plugin comme : Whitelist IP For Limit Login Attempts
  • Renommer le répertoire wp-content et indiquer le chemin dans wp-config.php (optionnel)
  • Supprimer le readme.html à la racine de wordpress
  • Changer le suffixe des tables de la base de données wp_ par untruc_ et l’indiquer dans wp-config.php
  • Avoir configuré les clés de sécurité dans wp-config.php (c’est automatique avec les nouvelles versions)
  • Cacher la version de WordPress affiché dans la partie administration pour l’utilisateur et pour l’administrateur

Pour cela éditez votre fichier function.php se trouvant dans le dossier de votre thème et ajoutez la ligne suivante (wp-content/themes/votre_thème/functions.php)

// Remove WordPress version</span>
remove_action('wp_head', 'wp_generator');
  • Empêcher les robots d’indexer les répertoires sensibles

Créez un fichier texte robots.txt à la racine de votre site avec pour contenu les dossiers à ne pas indexer :

User-agent: *
Disallow: /wp-content/
Disallow: /wp-admin/
Disallow: /wp-includes/

Cependant rien n’empêchera un robot malveillant de passer outre.

Je compléterais au fur et à mesure… mais c’est déjà un bon début et je n’ai pas forcement pensé à tout mettre alors les commentaires sont la pour ça.

Bonne configuration…

Le Chat

Auteur: Le Chat

Une autre façon de voir l'informatique pour chacun d'entre vous et en toute simplicité.

Partager sur

Pin It on Pinterest