Après mon précédent billet concernant le cas de l'utilisateur par défaut "admin", j'aborde aujourd'hui le fichier wp-config.php dans ma série "Comment sécuriser un blog WordPress".
Quel intérêt à protéger ce fichier ?
Le fichier wp-config.php est situé à la racine de votre blog. Il renferme de nombreux paramètres de configuration mettant directement en jeu la sécurité et le fonctionnement de votre blog.
On y trouve : l'adresse de votre serveur de base de données, le nom d'utilisateur ainsi que le mot de passe associé, vos préfixes de table ainsi que vos clés WordPress permettant de créer un cookie sécurisé lorsque vous vous connectez à en tant qu'administrateur.
L'accès direct à ce fichier ne renvoie heureusement qu'une page blanche (le fichier ne fait que définir des variables). Cependant, pour éviter d'éventuels accès indésirables suite à la découverte de faille dans l'un de vos plugins ou dans le cœur même du moteur WordPress, nous allons protéger son accès.
En pratique
Rien n'est plus efficace qu'un fichier .htaccess pour bloquer l'accès à ce fichier. Vous devrez placer ce fichier à la racine de votre blog.
! Attention ! il est fort probable qu'un fichier .htaccess soit déjà existant. Ouvrez-le simplement et placez-vous avant la ligne "# BEGIN WordPress" pour que WordPress n'écrase pas vos modifications.
Interdire totalement l'accès (erreur 403)
Cette technique fonctionne sur la quasi-totalité des hébergeurs, y compris les plus stricts en matière de sécurité :
# protection wp-config.php <files wp-config.php> Order deny,allow deny from all </files>
Ce qui aura pour effet d'interdire l'accès à tout le monde à ce fichier sensible en retournant proprement une erreur 403 (fordbidden). WordPress lui ne tiendra pas compte de cette instruction et fonctionnera normalement.
Pour renvoyer le visiteur vers une page particulière suite à cette erreur 403, il vous suffit d'ajouter la directive suivante :
ErrorDocument 403 http://votreblog.fr/votrepage.php
Attention : cette directive renverra toutes les erreurs 403 vers cette page, évitez-donc la page d'accueil comme destination car en cas de bug dans votre code il sera difficile de comprendre l'erreur.
Cacher la présence du fichier (erreur 404)
Si vous souhaitez montrer à l'éventuel pirate que vous êtes plus malin que lui, il vous suffit de masquer l'accès au fichier :
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^(.*)wp-config(.*)\.php$ [R=404,L] </IfModule>
Une véritable erreur 404 sera retournée (page not found), de la même façon que si le fichier n'existait pas... de quoi décourager les éventuels pirates qui penseront que votre structure WordPress est entièrement personnalisée et sécurisée.
C'est la page de votre thème /wp-content/themes/votre_theme/404.php qui s'affichera si celle-ci existe.
Masquez le contenu de vos répertoires
Veillez également à utiliser la directive interdisant le "listing" de répertoire. En effet, dans sa configuration par défaut Apache vous affiche le contenu de chaque dossier / sous-dossier ("Index Of").
Vous éviterez par exemple d'attirer les petits curieux susceptibles de vous voler quelques .psd trainant sur votre FTP (même si au fond vous n'aviez qu'a pas en laisser...).
Insérez la directive au tout début de votre fichier .htaccess :
Options All -Indexes
Conclusion
Ce type de manipulation n'est pas rare dans le monde du développement web, tous sites et blogs confondus. Elle permet néanmoins de passer à travers certaines attaques. C'est un pallier de plus quant à la sécurité de votre blog.
Si vous utilisez d'autres méthodes concernant le fichier wp-config.php, n'hésitez pas à m'en faire part.
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
21 commentaires
Cet article est intéressant pour sa technique d'utilisation de .htaccess ,mais à moins de ne pas avoir tout compris, ces manipulations empêchent de d'accéder à ce ficher via un navigateur, ce qui en cas de faille dans un module, ne sert a rien. Le module aura toujours accès au fichier, et c'est logique.
Une sécurité basic est d'utiliser un autre compte utilisateur que admin pour la gestion, et de laisser le compte admin, mais en lui réduisant les droits d'accès à ceux d'un simple visiteur. car en général les scripts d'attaque tentent de casser le mot de passe du compte admin.
mmm super ! je dirais même indispensable...mais concrètement il donne quoi le .htcaccess car ca fait beaucoup de code et on ne sait pas trop ou le mettre *mode noob on dsl*
@tilto : c'est un niveau de sécurité supplémentaire.
Concernant le compte admin je t'invite à lire mon premier billet à ce sujet
@les courts métrages : tout est expliqué dans le billet 😉
Sympa ton tutoriel.
Et je pense qu'ajouter un chmod 600 sur ce fichier ne serait pas mal non plus.
@forum informatique : tout à fait, cependant certains hébergeurs comme Free ne le supporte pas
Pas mal comme tuto. Mais je dirais que l'hebergeur est supposé éviter toutes failles. Du coup est-ce vraiment utile ou est-ce plus pour faire peur ? J'admets que c'est un peu facile comme commentaire mar bon.
@Pat : non, un hébergeur ne regarde pas ce que tu héberge (et n'a pas à le faire). La faille ne touche pas le serveur PHP, Apache ou MySQL par exemple, mais bien l'application PHP (càd WordPress) que tu utilises.
Un hébergeur s'arrête à partir du moment ou les services fournis fonctionnent 😉
"Rien n'est plus efficace qu'un fichier .htaccess pour bloquer l'accès à ce fichier. Vous devrez placer ce fichier à la racine de votre blog."
Pouvez-vous me dire si je peux le mettre a la racine de mon serveur meme si mon blog est dans un dossier ?
@Annonce : il suffit de placer le htaccess dans ce dossier
Perso, je crains plus les injections iframe, j'ai l'impression que ça a la côte en ce moment...
Bonjour,
Merci bcp pour toutes ces infos!
petite question de debutante:
Je viens de lire ton post sur comment securiser son wordpress.
J'utilise WordPress et quelqu'un a piraté mon site pour balancer des cookies.
penses tu que je dois vider mon site et tout reinstaller ou juste changer le mots de passe de ma base de données et suivre tes conseils ci dessous.
Merci ^^
Si tu ne sais pas par quoi est passé l'attaquant il faut en premier lieu changer tous tes mots de passes effectivement (base de données, ftp, wordpress, etc.).
Si tu as d'autres choses d'installé (applications) cohabitant avec ton blog alors il faudra colmater la faille car changer tes mots de passes ne changera rien
La remarque de tilto est parfaitement pertinente et je la partage pleinement, il existe plusieurs manières "d'accéder" au fichier config,
- l'accès via le serveur web,
- l'accès via l'application (en php, avec des includes/fopen/ et autres)
- l'accès via le système de fichier (en ftp/ssh etc..)
(Les deux derniers points étant similaires au niveaux de leur gestion en droits d'accès).
L'ensemble de l'article s'articule exclusivement autour de la protection du premier point. Hors par défaut, l'accès "web" à cette ressource (wp-config.php) renvoie une page blanche. Toutes les protections supplémentaires deviennent donc futiles. On ne corrige donc en rien l'éventuelle faille liée au plugin.
La seule protection efficace serait de supprimer ce fichier, en créer un en dehors de l'arborescence "apache/www", et utiliser la fonctionnalité prepend_file/append_file du php.ini, qui permet d'executer du code php en amont ou en aval de chaque script php.
Cela permettrait la connexion à une base de donnée en rendant parfaitement impossible la divulgation du mot de passe à l'application elle-même. (moyennant quelques protections supplémentaires chmod/su_php).
Au moins tu mets de pallier de sécurité, au plus tu rends ton blog/site vulnérable. Les failles sont tellement diverses et variées qu'il est impossible de dire d'un pallier de sécurité qu'il est inefficace 😉
Merci pour cette série d'articles sur la sécurité sous WP.
J'ai essayé le [script]Option All -Indexes[/script] dans le .htaccess
Ca provoque des erreurs 500 et rend tous les sites inutilisables... Il faut bien le mettre à la racine (/var/www) ?
Et le bout de code pour l'erreur 403, il faut le mettre dans le .htaccess de /var/www ou dans celui de /var/www/wordpress ?
C'est plus qu'indispensable... merci
Bonjour, très bien comme article !
J'ai essayé de suivre à la lettre ces conseils, toutefois un petit souci s'agissant du contenu de repertoire et de la directive "Option All -Indexes".
Comme plus haut, en l'insérant (en 3ème ligne du .htaccess donc), le site devient inaccessible (erreur 500). Si vous avez une idée...
Mais bon, pour le moment ça devrait aller ! Merci
Excellent article ! Mais comme cité par Shoot'Em all, je rencontre également une erreur 500 en essayant de supprimer l'indexation de mes fichiers images. J'ai contourné le problème en uploadant un fichier index.php vierge dans chaque dossiers images mais cette solution est-elle réellement efficace ?
@Eloka : Oui, car il y a un "s" à "option"
mon nom est beauvil, ce que je veux vraiement est d'interdire l'indexation d'une page wordpress par les moteurs de recherche, comme une page de telechargement d'un produit. j'ai deja mis sur private mais j'ai pas acces a cette page meme si je rentre l'adresse dans mon navigateur, est-ce que vous pouvez m'aider svp
@toufalk:
salut vire les balises script