Yes You Web !

Publié le 4 mars 2017

Etant le CMS le plus utilisé au monde, WordPress est la cible régulière de cyber-attaques. Les propriétaires de sites internet qui ont subi ces attaques pensent souvent que c’est personnel, que c’est une action d’un concurrent. Mais pas du tout ! Les pirates s’attaquent juste à des sites vulnérables.

Pour sécuriser correctement votre site WordPress, il est important de comprendre la façon dont les pirates opèrent pour entrer dans votre site WordPress. On peut regrouper les types d’attaques en 4 catégories :

  • 41% des sites sont piratés via une faille de sécurité dans leur plateforme d’hébergement : par exemple, utiliser le paramètre d’une URL pour procéder à une injection SQL. Cela permet au pirate d’ajouter du code dans votre base de données, de changer des données comme votre mot de passe ou même de supprimer toutes vos pages ou vos articles.
  • 29% sont piratés via un problème de sécurité dans le thème WordPress utilisé
  • 22% sont piratés via un problème de sécurité dans un plugin WordPress
  • 8% sont piratés à cause d’un mot de passe trop peu sécurisé

Source : article de WP WhiteSecurity Déc 2014

Ne paniquez pas et anticipez ! Nous allons détailler les techniques à mettre en place pour sécuriser votre site WordPress. Même si la sécurité n’est jamais garantie à 100%, cela vous évitera pas mal de problèmes.

Sécurité de votre site : les règles de base

Pour sécuriser votre site WordPress, il y a quelques règles à respecter / erreurs à ne pas commettre :

  • Héberger votre site chez un hébergeur reconnu : avec 41% d’attaques via votre hébergement, vérifiez que votre hébergeur respecte les règles élémentaires de sécurité et qu’il effectue des sauvegardes régulières de votre site. Même si vous optez pour un hébergement mutualisé, vous devez vérifier que l’hébergeur utilise bien les dernières versions de MySQL et de PHP, qu’il a un firewall optimisé pour WordPress et qu’il surveille les intrusions. Une connexion SFTP est également préférable à une connexion FTP, moins sécurisée. Nous travaillons essentiellement avec Gandi et OVH et n’avons rencontré que peu de problèmes à ce jour.
  • Téléchargez vos thèmes et plugins sur des sites officiels : cela peut vous paraître évident mais lorsqu’un thème ou un plugin est payant, certains peuvent être tentés de le télécharger illégalement. Sachez que des failles ou des virus peuvent se cacher dans ces fichiers donc évitez de le faire ! D’autant plus que les thèmes / plugins WordPress sont plutôt bon marché.
  • Rationalisez vos plugins : les plugins étant une faille possible dans la sécurité de votre site, n’installez que les plugins dont vous avez besoin. Vous pouvez désinstaller les plugins installés par défaut dans WordPress s’ils ne vous sont pas utiles. Même chose pour les plugins qui ne vous servent que temporairement, désinstallez-les quand vous n’en avez plus besoin.
  • Rationalisez vos thèmes : si vous testez plusieurs thèmes pour votre site, n’oubliez pas de les supprimer ensuite pour ne garder que le thème actif.
  • Mettez régulièrement à jour votre site WordPress : c’est une des règles les plus importantes. Un site sécurisé est un site à jour. Nous allons revenir sur cette règle plus en détail ultérieurement.

IMPORTANT : avant de vous lancer dans les étapes décrites ci-dessous, faites une sauvegarde de votre site et de votre base de données !

Sécurisez l’installation de WordPress

Lorsque vous installez WordPress, il est préférable de mettre en oeuvre les 3 points suivants :

Changer le préfixe de votre base de données

Lorsque vous installez WordPress, vous devez renseigner un certain nombre de champs dont le préfixe des tables souhaité. Par défaut, c’est wp_. Il est préférable de changer ce préfixe avec la valeur que vous souhaitez : monsite_ par exemple ou quelque chose de plus complexe et aléatoire comme a6g54mlf_ (exemple donné à titre indicatif).

Si vous n’avez pas changé le préfixe lors de l’installation de WordPress, il est toujours possible de le faire a posteriori. Vous retrouvez cette valeur dans votre fichier wp-config.php. Pour la changer, il ne suffit pas de modifier le nom des tables dans le fichier, ce serait trop simple, 2 solutions s’offrent à vous :

  • vous pouvez télécharger un plugin comme iThemes Security, plugin très complet qui vous permet notamment de changer le préfixe des tables.
  • vous pouvez également le faire manuellement, même si cela prend un peu plus de temps : il y a 2 façons de faire via PHPMyAdmin :

1ère méthode : renommer chaque table via une requête SQL du type :

Copier

Vous devez appliquer cette requête à chaque table WordPress sans oublier les tables créées par vos plugins. Il faut ensuite modifier le nouveau préfixe dans votre fichier wp-config.php.

2nde méthode : cliquer sur le nom de chaque table puis sur l’onglet « Opérations ». Dans le bloc « Options pour cette table », vous pouvez en changer le nom. Cette opération doit être faite pour chaque table.

Yes You Web !

Vous devez ensuite mettre à jour le préfixe des tables dans les tables usermeta et options.

Vous pouvez le faire avec l’interface PHPMyAdmin mais c’est plus rapide via une requête SQL.

Pour mettre à jour la table usermeta (wp_usermeta), utilisez la requête suivante dans l’onglet SQL – pensez à remplacer « newprefix » par le vôtre :

Copier

Pour mettre à jour la table otions (wp_options), utilisez la requête suivante dans l’onglet SQL, toujours en remplaçant « newprefix » par le vôtre :

Copier

Vérifier les clés de sécurité WordPress

Stockées dans le fichier wp-config.php, ces clés sont utilisées par WordPress pour assurer un meilleur cryptage des informations stockées dans les cookies des utilisateurs lorsqu’ils sont connectés à un site WordPress, ainsi qu’une meilleure sécurisation lors de la visite du tableau de bord WordPress avec le protocole SSL.

Toutes ces clés sont automatiquement renseignées à partir de la version 3.0 de WordPress. Téléchargez votre fichier wp-config.php via votre FTP, vous devez voir les éléments suivants :

Yes You Web !

Ces clés sont uniques, surtout les diffusez pas (les clés ci-dessus sont mentionnées à titre d’exemple et sont fictives). Elles peuvent être modifiées à loisir, sachez juste que les utilisateurs loggués devront se relogguer après modification des clés.

Si votre version de WordPress est plus ancienne (même si vous l’avez mis à jour), les champs seront vides comme dans l’exemple ci-dessous ou partiellement renseignées :

Yes You Web !

Vous devez donc les renseigner vous-même :

Installer le plugin Block Bad Queries

BBQ (Block Bad queries) est un plugin qui permet de déjouer les attaques qui utilisent des requêtes malveillantes comme les injections SQL. Vous pouvez le télécharger ici : Block Bad Queries. Il suffit de l’activer, aucune configuration n’est requise.

Mettez à jour votre WordPress

Chaque nouvelle version de WordPress corrige des failles de sécurité identifiées dans la version précédente. C’est la raison pour laquelle utiliser une ancienne version de WordPress est source de vulnérabilité.

WordPress est soumis à des mises à jour mineures et des mises à jour majeures :

  • Les mises à jour majeures introduisent de nouvelles fonctionnalités : elles se repèrent par un changement des premiers chiffres de la version de WordPress, par exemple, 3.9, 4.0, 4.1…
  • Les mises à jour mineures corrigent des failles de sécurité ou des erreurs trouvées dans des mises à jour majeures : elles ont des numéros qui s’incrémentent par 0.01, par exemple, 4.5.1, 4.5.2, 4.5.3…

Depuis la version 3.7, WordPress met à jour automatiquement ses versions mineures. En revanche, la mise à jour des versions majeures vous est signalée dans votre tableau de bord :

Yes You Web !

Un simple clic et la mise à jour se fait. Mais attention, pensez à faire une sauvegarde de votre site avant car il n’est pas rare de voir des incompatibilités entre la nouvelle version de WordPress et un plugin ou votre thème, et donc votre site peut être cassé après une mise à jour majeure.

Si vous souhaitez aller plus loin, vous pouvez empêcher WordPress de faire automatiquement les mises à jour mineures, vous devrez alors penser à les faire manuellement. Il suffit d’ajouter ceci à votre fichier wp-config.php :

Copier

Il est également possible de dire à WordPress de faire toutes les mises à jour automatiquement (majeures et mineures) mais nous ne vous le recommandons pas.

Mettez à jour votre thème et vos plugins

La moitié des attaques réussies sur un site WordPress passe par le thème ou vos plugins. Vous devez donc faire attention à ce que vous installez.

  • Si vous pouvez vous passer de plugins, n’en utilisez pas. Par exemple, un plugin est inutile pour mettre votre script Google Analytics dans votre site.
  • Si vous avez ponctuellement besoin d’un plugin, désactivez-le et supprimez-le après utilisation : par exemple, vous avez besoin d’afficher une page de maintenance pendant que vous développez votre site. Une fois le développement terminé, désactivez et supprimez le plugin.
  • Lorsque vous recherchez un plugin, vérifiez les éléments suivants : la date de la dernière mise à jour (un plugin qui n’est plus maintenu a forcément des failles de sécurité), le nombre de téléchargements et les notes moyennes attribuées par les utilisateurs.
  • Choisissez un thème de qualité : si le thème est gratuit, vérifiez sa popularité et la qualité de son code. Acheter un thème Premium vous donnera davantage de garanties et du support pour son utilisation.

Vous pouvez vérifier que votre thème et vos plugins ne contiennent pas de code malveillant grâce à des plugins comme Theme-Check et Plugin-Check.

Vous devez mettre à jour régulièrement les versions de votre thème et de vos plugins. Comme précédemment, n’oubliez pas de faire une sauvegarde de votre site avant afin d’éviter une incompatibilité ou un crash de votre site. Il est possible de faire des mises à jour automatiques mais nous vous le déconseillons.

Pour aller plus loin, il est possible de désactiver l’éditeur de thèmes et plugin, qui permet aux utilisateurs de modifier votre thème ou vos plugins. Il suffit d’ajouter ceci dans votre fichier wp-config.php : (Notez que cette commande peut perturber le fonctionnement de certains plugins)

Copier

Vous pouvez également désactiver la possibilité de mettre à jour ou d’installer des plugins / thème en ajoutant cette ligne à votre fichier wp-config.php :

Copier

Utilisez les bonnes permissions de dossiers / fichiers

Via votre FTP, vous avez accès à tous vos dossiers et fichiers WordPress. Il est important d’attribuer les bonnes permissions à ces fichiers afin d’éviter qu’un utilisateur externe n’en modifie le contenu. Voici les règles :

  • Vos dossiers doivent être 755
  • Vos fichiers doivent être en 644
  • Votre fichier wp-config.php et votre .htaccess doivent être en 400 ou 444

Pour mettre à jour les droits d’accès d’un fichier, faites un clic droit sur le dossier dans votre FTP, puis « changer le droit d’accès ». Vous n’avez pas besoin de réitérer l’opération pour tous les fichiers / dossiers, il suffit de cocher les cases adéquates dans « Récursions dans les sous-dossiers ».

Yes You Web !

Si vous souhaitez aller plus loin, voici les recommandations officielles de WordPress : Modifier les permissions sur les fichiers.

Désactivez le rapport d’erreur PHP

Si le dysfonctionnement d’un thème ou d’un plugin génère un rapport d’erreur, le chemin d’accès au serveur peut être mentionné. Si un pirate tombe dessus, il peut entrer par là. Il vaut mieux désactiver ce rapport en ajoutant ceci à votre fichier wp-config.php :

Copier

Si ce code ne fonctionne pas, contactez votre hébergeur pour savoir s’il peut le désactiver de son côté.

Protégez votre fichier .htaccess

Lié à la façon dont votre serveur fonctionne, le fichier .htacess est un fichier de configuration très important. Il permet entre autres de définir vos réécritures d’URLs ou de renforcer la sécurité de votre site.

Attention ! Tout le code qui va suivre doit être écrit en dehors des tags # BEGIN WordPress et # END WordPress car tout ce qui se trouve à l’intéreur de ces tags peut être modifié par WordPress, lors d’une mise à jour par exemple. Si vous ne trouvez pas votre fichier .htacess avec votre FTP, pensez à cocher la case « Afficher les fichiers cachés ».

Nous allons protéger plusieurs éléments via le .htaccess.

Protéger le fichier .htacess lui-même

Pour protéger l’accès du .htaccess lui-même, copiez les lignes de code suivantes :

Copier

Puis pour aller plus loin, copiez aussi le code suivant. Ce code apporte une protection plus forte que le code présenté plus haut, car il empêche l’accès à tout fichier contenant « HTA », « hta » ou n’importe quelle combinaison de casse de ceux-ci (l’autre code protégeant uniquement l’accès à la combinaison « htaccess ») :

Copier

Protéger le fichier wp-config.php

Nous avons vu précédemment que le fichier wp-config.php contient des informations importantes sur votre site. Pour en protéger l’accès, copiez les lignes de code suivantes :

Copier

Protéger le répertoire wp-includes

Ce dossier contient des fichiers importants, personne ne doit en voir le contenu. Voici le code à ajouter pour le protéger :

Copier

Protéger les autres répertoires

Les autres répertoires comme le dossier /upload/ doivent également être protégés. Copiez le code suivant :

Copier

Limiter le hotlinking des images

Le hotlinking est une pratique courante qui consiste à afficher une image en utilisant l’adresse URL en provenance d’un autre site où elle est publiée. En fait, au lieu de stocker l’image sur son serveur, le hotlinkeur crée un lien direct vers le serveur d’origine, ce qui vous prend de la bande passante. Pour éviter cela, copiez le code suivant en remplaçant l’URL par la vôtre et en mettant le chemin de l’image qui sera affichée chez les voleurs.

Copier

Protéger le dossier wp-content

Il vous faut créer un second fichier .htaccess et le mettre dans le dossier wp-content. Il doit contenir le code suivant :

Copier

Ce code peut casser certains thèmes qui n’autorisent pas l’excécution du PHP. Si c’est le cas, retirez le fichier.

Désactivez XML-RPC

Depuis la version 3.5 de WordPress, XML-RPC est activé par défaut. Cette fonctionnalité permet de réaliser des contributions à distance (depuis des smartphones ou tablettes) et est utilisée par les pingbacks / trackbacks. Par le biais de XML-RPC, les pirates peuvent réaliser des attaques DDoS plus importantes et impactantes.

Pour éviter ces attaques, le mieux est de désactiver XML-RPC. Le plus simple est de le faire via un plugin : Disable XML-RPC Pingback ou Disable XML-RPC. Cette fonctionnalité existe aussi dans la plupart des plugins tout en 1 que nous vous proposons plus bas.

Si vous préférez ne pas installer de plugin, vous pouvez copier ce code dans votre fichier .htacess (la ligne allow from est optionnelle, elle sert si vous voulez autoriser une ou plusieurs adresses IP et bien entendu, il faut remplacer 123.123.123.123 par votre propre IP) :

Copier

Protégez votre page de login

La page de connexion est souvent la cible de pirates car son format est toujours du style : www.monsite.com/wp-admin ou www.monsite.com/wp-login.php. Vous pouvez à la fois cacher votre page de login et limiter les tentatives de connexions.

Cacher votre page de login

Il existe plusieurs plugins qui font ça très bien :

  • Rename wp-login.php : une fois le plugin activé, les répertoires wp-admin et wp-login.php page seront inaccessibles.
  • Ithemes Security : nous l’avons déjà utilisé pour renommer les tables de votre base de données, dans ses options avancées, vous pouvez également renommer facilement votre page de login.
  • Lockdown WP Admin : il vous permet de cacher votre interface admin et votre page de login.
  • Move Login : vous permet de renommer vos URL de connexion, déconnexion, inscription, mot de passe oublié et réinitialisation du mot de passe.

Si vous avez oublié votre nouvelle URL de connexion, pas de panique ! Il vous suffit de désactiver le plugin : vous pouvez renommer son dossier via votre FTP ou le supprimer et le réinstaller une fois que vous serez à nouveau loggué.

Limiter les tentatives de connexion

Pour éviter de multiples tentatives de connexions d’une adresse IP, installez un plugin comme Login LockDown. Cela va blackilister les IP et les empêcher de se connecter pendant une certaine période. Vous pouvez tout paramétrer vous-même et bien sûr autoriser à nouveau un de vos utilisateurs qui se serait fait bannir en essayant de se connecter plusieurs fois sans succès.

Yes You Web !

Avec ce plugin, vous voyez quelles adresses IP tentent de se connecter et en cas d’attaques, vous pouvez lister les IP et les bloquer définitivement via le fichier .htaccess en ajoutant le code suivant dans votre fichier (en dehors des tags WordPress comme nous l’avons vu précédemment et bien entendu en adaptant l’adresse IP à celles que vous avez relevées) :

Copier

Utilisez les bons login / mot de passe

Login

Il y a quelques années, WordPress imposait admin comme login de connexion par défaut. Les pirates avaient juste à trouver votre mot de passe pour entrer dans votre site.

Aujourd’hui, lorsque vous installez WordPress, vous pouvez choisir le login que vous souhaitez alors choisissez un autre login qu’admin.

Si vous travaillez avec une ancienne version de WordPress, allez dans votre tableau de bord puis dans Utilisateurs. Vous pouvez alors créer un autre utilisateur puis supprimer admin. Vous ne perdrez aucun contenu car au moment de la validation de la suppression, WordPress vous demandera à quel utilisateur vous voulez attribuer les anciens contenus d’admin, vous choisirez alors votre nouvel utilisateur administrateur.

Mot de passe

Vous l’avez entendu maintes et maintes fois, mais ces règles sont également valables ici :

  • Choisissez un mot de passe unique, un mot de passe que vous n’utilisez pas sur d’autres sites.
  • Changer régulièrement votre mot de passe
  • Optez pour un mot de passe complexe, avec une alternance de minuscules, majuscules, caractères spéciaux, chiffres. Vous pouvez vous aider en utilisant un générateur de mot de passe. Aujourd’hui, WordPress vous le créé automatiquement à l’installation.

Yes You Web !

Pour aller plus loin, vous pouvez également ajouter un code d’authentification en plus de votre mot de passe.

Vous trouverez ça lourd à la connexion mais c’est un moyen très sûr pour éviter les intrusions. Selon la méthode choisie, vous recevrez un code par SMS, par appel téléphonique, par application mobile que vous devrez saisir à chaque connexion.

Voici quelques exemples de plugins gratuits : Google Authenticator, Clef, Duo Two-Factor Authentication, OpenID.

Pour tout savoir sur la manière dont gérer vos mots de passe et les impacts éventuels, nous vous invitons à lire cet article très intéressant (anglais) : The Real Life Risks Of Re Using The Same Passwords.

Cachez la version de votre WordPress

Par défaut, WordPress place un meta tag dans le code de votre site qui précise la version de WordPress que vous utilisez. Pour le voir, allez sur votre site et faites un clic droit / Voir le code source. Puis, faites une recherche sur le mot « generator », vous verrez cette ligne dans la balise head du site :

Copier

Cette information sert aux pirates, surtout si vous utilisez une ancienne version de WordPress car ils savent tout de suite quelle faille utiliser. Pour éviter cela, ajoutez le code suivant en haut du fichier functions.php de votre thème, accessible par dans votre tableau de bord dans Apparence / Editeur :

Copier

Retirer le numéro de version n’est pas obligatoire si votre site est à jour en permanence.

Evitez les spammeurs

Les articles de WordPress sont source de spams dans les commentaires. Même si aucun article n’est publié, vous risquez de recevoir des spams.

  • Si vous n’utilisez pas les articles dans votre site, allez dans Articles / Tous les articles et supprimez l’article par défaut de WordPress : Bonjour le Monde
  • Si vous utilisez les articles dans votre site, installez le plugin Akismet, il vous faudra créer un compte et obtenir une clé API pour l’activer mais après, vous serez tranquille.

Scannez votre site

Contrairement à ce qu’on pense, une attaque ne met pas votre site par terre d’un seul coup, c’est beaucoup plus insidieux et le but des pirates est souvent d’utiliser votre serveur pour envoyer des spams.

Quand votre hébergeur vous contacte pour vous dire que votre site a été piraté, c’est souvent trop tard et il est dur de le nettoyer à 100%. Pour éviter cela, le mieux est de scanner régulièrement les fichiers de votre thème. Plusieurs plugins sont à votre disposition :

  • Theme Authenticity Checker (TAC) : ce plugin scanne votre thème à la recherche de code malveillant. Si votre thème est infecté, vous verrez le code concerné, le fichier dans lequel il se trouve et son emplacement exact dans ce fichier.
  • Ultimate Security Checker : ce plugin scanne votre site à la recherche de centaines de menaces connues et vous avertit de la gravité de la menace.
  • AntiVirus : un bon plugin qui scanne les fichiers de votre thème et de votre base de données à la recherche d’injections malveillantes. Vous pouvez recevoir les résultats chaque jour par email, très pratique.
  • WP Antivirus Site Protection : ce plugin scanne votre serveur et peut détecter les backdoors, rootkits, chevaux de troie, vers… Il se lance automatiquement chaque jour.
  • Sucuri Sitecheck : ce plugin regarde si votre site est blacklisté et le scanne dans son intégralité à la recherche de virus, spam ou tout autre problème.
  • CodeGuard : ce plugin est utilisé pour sauvegarder quotidiennement votre site. S’il détecte un changement, il vous dira ce qui a été ajouté, modifié ou supprimé.

Faites des sauvegardes

Mieux vaut prévenir que guérir : ce vieux proverbe s’applique particulièrement bien aux sites internet. Même si votre site WordPress est sécurisé, vous n’êtes pas à l’abri à 100%.

Le mieux est donc de réaliser des sauvegardes régulières. Votre hébergeur en fait déjà ? C’est pas grave, doublez avec une sauvegarde externe.

WordPress propose des solutions pour sauvegarder et restaurer facilement votre site : il y a VaultPress, CodeGuard ou BlogVault.
Si vous préférez un plugin, regardez BackupBuddy, Backup Creator et UpdraftPlus Backup and Restoration for WordPress.

Les plugins tout en 1

Tout ce que nous venons de vous expliquer vous paraît être du chinois ? (même si nous avons essayé de faire simple…) Vous avez peut-être envie d’opter pour un plugin tout en 1.

WordPress vous en propose plusieurs qui répondent en grande partie aux différents points de sécurité que nous venons de voir.

BulletProof Security

Ce plugin vous propose de protéger votre fichier .htaccess, un système de détection des intrusions, la sécurisation de votre login, des sauvegardes de votre base de données et un monitoring quotidien qui garde la trace de tout changement dans un fichier. Vous avez la possibilité de paramétrer manuellement plusieurs options mais si vous ne voulez pas vous compliquer la vie, vous pouvez également le lancer en 1 clic.

Sucuri Security

Ce plugin scanne votre site à la recherche de PHP mailers, d’injections, de redirections malveillantes, des tentatives de phishing… En 1 clic, vous pouvez également activer la protection de votre dossier d’Upload, masquer la version de WordPress, désactiver le Theme et Plugin editor et restreindre l’accès aux dossiers wp-content et wp-includes.

iThemes Security

C’est l’un des plugins de sécurité les plus téléchargés. Il traite les principales failles de sécurité : renommer la page de login, changer l’ID du 1er utilisateur, retirer les messages d’erreurs, changer la version de WordPress… Il effectue également un scanner de votre site pour détecter les changements de fichiers.

Wordfence Security

Ce plugin vous propose la double authentification par smartphone, un firewall pour blocker les principales menaces et une vérification de la sécurité de vos mots de passe. Il scanne aussi votre site à la recherche de backdoors, virus, tentatives de phishing et détecte les attaques DDos.

Conclusion

Voilà, la sécurité de votre site WordPress n’a plus aucun secret pour vous ! En suivant ces différentes étapes, vous aurez efficacement sécurisé votre site. Nous espérons que cet article vous aura été utile.
Si vous avez des questions, posez-les en commentaires ci-dessous.
Et n’hésitez pas à partager vos propres retours d’expérience !