Sécuriser WordPress rapidement

Sécuriser Wordpress

Félicitation ! Votre site grandit, le trafic augmente et vous avez de plus en plus de visiteurs.
Et bien bravo, vous venez également de gagner de plus en plus de tentatives de hack et autres intrusions 🙂 C’est comme cela, ça va avec…
Si vous n’êtes pas convaincus, allez regarder vos logs vous allez avoir des surprises…
Pour régler la majorité des problèmes, il y a quelques astuces très simple à mettre en place pour sécuriser votre site WordPress.

En utilisant le fichier .htaccess on peut interdire les accès à quelques fichiers sensibles. On évitera ainsi les attaques de type « brute force » ou encore les failles causées par des bugs dans les plugins.

Avant d’aller plus loin, il faut bien préciser le contexte.
Première chose, qui dit .htaccess dit Apache. Si votre serveur est sous Nginx par exemple, il vous faut avoir accès à la configuration globale pour mettre en place ces restrictions.
Deuxième point, quand on met en place des restrictions par IP (comme on va le voir plus loin) il faut bien avoir conscience de ce que l’on fait et on utilisera ce mode plus pour le cas où il y a un/deux administrateurs. Sinon c’est ingérable.

Empêcher le listage des dossiers

Ce n’est pas une particularité de WordPress mais c’est une bonne pratique à mettre en place.
Généralement les configurations d’Apache 2.2 par défaut listent les dossiers. Même s’il n’y a pas de risque majeur en soit, cela peut poser un problème si certains dossiers doivent rester privés.
Si on prend le cas le WordPress il y a un dossier bien connu qui est consultable librement si on ne fait pas attention, c’est le dossier /wp-content/uploads/ Là où sont stockés tous les médias que vous insérez.
Pour bloquez le listage des dossiers, ajouter une simple ligne dans le .htaccess :

Options -Indexes

Essayez d’accéder à ce dossier et vous verrez maintenant une belle erreur 403.

Interdire l’accès au fichier readme.html

On reste dans le léger. On doit supprimer la version de wordpress qui est intégrée au header. Cela évite de dévoiler sa version si jamais elle est connu pour être vulnérable.
Mais regardez à la racine de votre WordPress. Il y a un beau fichier readme.html dans lequel on voit le numéro de version en énorme…
Notez qu’on pourrait se contenter de supprimer le fichier. Erreur ! A la prochaine mise à jour de WordPress il sera remis !
Donc reprenez votre .htaccess et ajoutez le bloc ci-dessous :

<Files readme.html>
   order deny,allow
   deny from all
</Files>

Allez sur votreurl.tld/readme.html, et si tout est ok là encore vous aurez une erreur 403.

Bloquer l’accès au fichier wp-config.php

Maintenant cela devient sérieux !
Le fichier wp-config.php contient les principaux paramètres de votre site, à commencer par les identifiant de la base de données.
Il faut impérativement interdire l’accès à ce fichier. On l’a vu récemment avec la faille du plugin Slider Revolution où le plugin permettait de télécharger le fichier…
Pour régler le problème, comme tout à l’heure, ajoutez le bloc suivant à votre .htaccess :

<Files wp-config.php>
    order deny,allow
    deny from all
</Files>

Appelez ce fichier et admirez l’erreur 403.

Déplacer le fichier wp-config.php

Plutôt que de bloquer l’accès, vous pouvez tout simplement déplacer votre wp-config.php dans un dossier supérieur (merci Thomas).
Supposons que votre WordPress se trouve dans /user/www/. Votre wp-config.php se trouve alors ici : /user/www/wp-config.php.
Déplacez le alors d’un cran au-dessus dans /user/. Il ne sera donc plus accessible du tout.

Attention, cette astuce n’a d’intérêt que si le dossier parent n’est pas accessible. Dans le cas contraire, ce sera plus dur de trouver le wp-config.php mais pas impossible.

Interdire l’accès au fichier wp-login.php

Très important également et très efficace. Mais comme je le disais en introduction, l’astuce ci-dessous ne vaut que si les contributeurs sont limités puisque nous allons restreindre à l’IP.
Quoi de plus simple que de tenter l’attaque brute force sur la page de login… Et bien là terminé ! Cette page est maintenant accessible uniquement aux IPs qui seront indiquées dans les sections « Allow from ».
Comme toujours, copiez le bloc dans votre fichier .htaccess. Et surtout renseignez bien vos IPs. Vous pouvez ajouter autant de lignes « Allow from » que souhaité :

<Files wp-login.php>
    order deny,allow
    Deny from all 
    Allow from xxx.yyy.zzz.aaa
    Allow from xxx.yyy.zzz.bbb
</Files>

Pour tester, indiquez une autre IP que la votre et essayez de vous loguer. Si tout va bien vous aurez une erreur 403 comme prévu.

Voilà pour ce premier jet de sécurisation de WordPress. N’hésitez pas à faire part de vos astuces.

8 commentairesLaisser un commentaire

  • Une astuce pour WordPress et OVH mutualisé, comme le fichier wp-config n’est pas obligé d’être à la racine du site! Pour une installation de WordPress à la racine de l’hébergement, le fichier peut donc se trouver en amont du dossier www, et à cet endroit il sera inaccessible en http.

    D’une manière générale avec WordPress, on peut ainsi déplacer wp-config dans un dossier parent de l’installation, ainsi il n’est pas à la place attendue lors d’une potentielle attaque. Cependant, il faut faire très attention à ne pas la déplacer dans un dossier ou il sera visible, indexable, etc…

  • Bonsoir Thomas,

    Merci pour cette astuce. Je ne la connaissait pas. Il semble que ce soit possible depuis les versions 2.6/2.7 de WordPress.
    J’édite le post en conséquence 🙂

  • Bonsoir,

    Mon blog vient d’être piraté et j’ai dû tout réinstaller WordPress… Du coup je me penche sur la sécurité mais je n’y connais pas grand chose.

    Je vous remercie pour vos conseils et vos explications mais je bute sur ce point : comment intégrer le code suivant à mon fichier wp-config.php :

    order deny,allow
    deny from all

    J’ai utilisé Notepad++ et modifié directement le fichier sur le serveur via Filezilla.
    Mais après avoir inséré ces lignes de code je ne peux plus accéder à mon site par l’URL habituelle : message d’erreur.

    Est-ce normal ? Peut-être que je ne respecte pas la syntaxe ? Pouvez-vous m’éclairer un peu ? Merci !

  • Bonsoir vieuxgeekmoisi 🙂

    Effectivement de cette façon cela ne peut pas marcher.
    Les instructions « order, deny… » ne sont pas pour le fichier wp_config.php mais pour votre fichier .htaccess d’Apache 🙂

    Bon courage

  • Bonjour,

    J’aimerais restreindre l’accès aux fichiers wp-login et wp-admin, mon site WordPress strictement personnel, je suis le seul user.
    Alors que mon IP n’est pas fixe, comment la rendre fixe ?

    Merci.

  • Jean-Noël Il existe plusieurs solutions ; la première est ne jamais s’avouer vaincu !

    En client DynDNS hébergé chez toi (certaines box le font) . A chaque changement d’adresse IP de ta box, le client ira notifier le serveur sur lequel est hébergé ton wordpress que l’IP d’administration à changé, suite à cette notification ton serveur devra écrire la nouvelle IP dans le .htaccess et reload apache.

    Tu peux aussi utiliser le portknocking pour editer le htaccess dynamiquement en communiquant avec une suite de port définie à l’avance pour confirmer ton identité (l’IP faisant le knock avec succès sera autorisée dans le htaccess) .

    Fait chauffer ton moteur de recherche favori !
    Bon courage.

Vous avez aimé cet article ? Réagissez !

Votre email ne sera pas publié. Les champs requis sont marqués d'une astérisque *