Comment sécuriser votre site WordPress en 12 étapes

Si vous ave installé un site WordPress et que vous ne l’avez pas sécurisé, vous risquez de vous faire pirater, meme si vous n’avez que 3 visiteurs par jours. On vous explique dans cet article comment vous protéger des principaux risques de hack.

WordPress est de plus en plus populaire

De plus en plus de personnes ont décidé d’ouvrir leurs propre blog, que cela soit pour partager leurs idées sur un sujet ou encore pour se lancer dans l’e-commerce, la plupart d’eux ont choisi de créer un site WordPress. Ce moteur de blog est actuellement le CMS le plus employé au monde.

Comment sécuriser votre site WordPress en 12 étapes

WordPress était à ses débuts un outil pour créer des sites  d’internet basiques. Ce logiciel en Open Source a ensuite été amélioré au fil des années pour devenir un CMS performant mais surtout simple d’utilisation. La communauté de développeurs qui se consacre à son amélioration veut proposer un utilitaire accessible à tous pour la conception d’une plateforme web. Aujourd’hui, tout le monde peut utiliser WordPress pour être présent sur l’internet.

Les utilisateurs n’auront pas à écrire une ligne de code pour obtenir un portail répondant à leurs besoins. L’outil met à la disposition des particuliers une infinité de modèles de sites qu’ils peuvent personnaliser à souhait. Ils peuvent créer un blog, une boutique en ligne ou encore un site professionnel. WordPress propose même une solution d’hébergement gratuite. Néanmoins, cela limitera les options d’administration de la plateforme par la suite.

Les risques de piratage pour un site WordPress

En 2015, 25 % des sites mis en ligne avaient été créés et gérés avec WordPress. Aujourd’hui, Ce CMS est le plus employé au monde. Il a réussi à attiser la curiosité des hackers. De nombreux pirates informatiques s’amusent à détourner l’accès  aux  sites WordPress. Dans ce contexte, les particuliers qui envisagent de créer leurs portails avec ce moteur de blog doivent prendre certaines précautions. Dans le but d’éviter les risques de piratage, faire appel à des professionnels est conseillé.

Ils mettront tout en œuvre pour renforcer la sécurité WordPress. Outre d’ajouter des plug-ins utiles, ils useront de certaines techniques pour détecter la moindre tentative d’intrusion. L’administrateur n’aura alors plus à surveiller la disponibilité de son site constamment. Les gérants pourront ainsi se consacrer à leurs activités. Ils peuvent entre autres se concentrer sur une stratégie digitale efficace pour augmenter le trafic. Les prestataires peuvent aussi leur suggérer les meilleures approches dans ce domaine.

Mettez à jour votre installation et vos plugins

On ne vous le dira jamais assez, mettez tout à jour dès qu’une nouvelle version de WordPress ou de vos plugins est disponible.
Ces mises à jour résolvent souvent des failles de sécurité…

Masquez votre compte administrateur

Lors de l’installation de votre site ne choisissez ni admin comme nom de compte ni votre prénom ou votre nom de famille. Ces comptes sont les premiers qui seront testé par les hackers !
S’il est trop tard pour cela vous pouvez changer le nom de votre compte via phpMyAdmin ou par l’intermédiaire de plugins mais je vous conseille plutôt de :

  • créer un nouvel utilisateur admin
  • supprimer votre premier compte admin
  • et transférer vos articles sur ce nouveau compte

Rassurez-vous ces options sont très bien expliquées lors de la suppression d’un compte.

Pourquoi faire cela ?
Tout simplement parce qu’il est possible de découvrir assez facilement le login de votre premier utilisateur (ici l’admin) en détournant l’utilisation la chaîne author=1.

Seulement il ne faut pas s’arrêter là car votre login admin peut encore être retrouvé en analysant … vos commentaires !
En effet WordPress va rajouter automatiquement une classe comment-author-votrelogin à chacun de vos commentaires… Ballot non ?

Pour éviter cela il vous suffit d’intégrer le petit hack suivant dans le fichier functions.php de votre thème :

add_filter( 'comment_class',  'remove_comment_author_class' );
function remove_comment_author_class( $classes ) {
        foreach( $classes as $key => $class ) {
                if(strstr($class, "comment-author-")) {
                        unset( $classes[$key]);
                }
        }
        return $classes;
}

Ce n’est pas fini ! Car votre login apparait aussi dans la balise qui se trouve dans votre flux RSS.

Manque de bol il n’existe pas de hack pour l’enlever proprement…
Vous allez donc devoir procéder en 3 étapes :

  • Copier le fichier /wp-includes/feed-rss2.php dans le répertoire de votre thème
  • Editez-le et remplacez la balise  par ce que vous voulez
    Exemple :
  • Rajoutez le code suivant dans votre fichier functions.php :
add_feed('rss2', 'create_my_custom_feed');
function create_my_custom_feed() {
        load_template( TEMPLATEPATH . '/feed-rss2.php');
}

Et voilà, bonne chance pour trouver votre login de connexion maintenant 😉

Cryptez mieux votre mot de passe

C’est évident mais je le rappelle quand même : n’utilisez pas votre login, votre prénom ou tout mot de passe qui serait facile à deviner.
Idéalement mettez-y des caractères spéciaux des chiffres, des majuscules, des minuscules, etc.

Par défaut les mots de passe WordPress sont encryptés en MD5, et donc « relativement » faciles à cracker.

Semisecure Login Reimagined remplace ce cryptage par un la combinaison plus solide d’une clé publique et d’une clé privée d’encryption.

Limitez les tentatives de connexion infructueuses

User Locker permet de limiter le nombre de tentatives de connexion avant de bloquer un compte.

Dès qu’un compte est bloqué, il ne peut être débloqué qu’en faisant une demande de nouveau mot de passe !
Les attaques en force brute sont donc impossibles 🙂

Rajoutez une clef supplémentaire à votre installation WordPress

Lors de votre installation WordPress il y a fort à parier que vous n’avez pas changé votre clef secrète, utilisée notamment pour encrypter vos connexions à votre base de données SQL .
Qu’à cela ne tienne, ça se corrige facilement !

Cliquez sur ce lien : Génération d’une clef privée WordPress

Copiez les 4 lignes qui devraient ressembler à cela :

define('AUTH_KEY','xxxxxx');
define('SECURE_AUTH_KEY','xxxxxx');
define('LOGGED_IN_KEY','xxxxxx');
define('NONCE_KEY','xxxxxx');

Et collez les dans votre fichier wp-config.php

Masquez votre version de WordPress

Il existe des plug-ins mais autant rajouter ces quelques lignes dans votre fichier functions.php :

remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );
remove_action('wp_head', 'wp_dlmp_l10n_style' );
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');

Oui je sais, je ne masque pas que la version mais le reste ne sert à rien non plus 😉

Supprimez également le fichier readme.html qui se trouve à la racine de votre installation et qui contient le numéro de votre version WP installée.

Protégez vos répertoires

Un des soucis de WordPress c’est que le CMS est open-source et très connu.
Par conséquent n’importe qui peut le télécharger et découvrir en 5 minutes l’architecture de votre site, et parfois ses failles…

Pour une raison que je ne comprends pas la plupart des répertoires ne sont pas protégés en lecture.

Dans le répertoire racine de votre blog se trouve le fichier .htaccess qui définit certaines règles de sécurité ainsi que les règles d’URL rewriting.

Rajoutez au début du fichier les ligne suivantes :

order allow,deny
deny from all
satisfy all

order allow,deny
deny from all

Options -Indexes
ServerSignature Off

Les 2 premiers blocs limitent les accès à vos fichiers .htaccess et wp-config.php (où se trouvent EN CLAIR vos login/password de connexion à votre Base de données).

Les 2 dernières lignes protègent en lecture les répertoires et masquent la signature de votre serveur Apache.

Pour rajouter une protection à vos différents répertoires en lecture, créez ensuite un fichier vide nommé index.php, et copiez le dans les répertoires suivants :

  • /wp-content/
  • /wp-content/plugins/
  • /wp-content/uploads/

Modifiez le préfixe de vos bases de données

Par défaut les bases de données WordPress sont préfixées de wp_ Vous pouvez changer ce réglage lors de votre première installation mais la plupart des gens ne sachant pas de quoi il retourne valident le réglage tel quel.

Par conséquent les hackers qui tentent de vous pirater par injection SQL savent déjà par quelles noms de bases commencer !

Vous pouvez modifier ça à la main via quelques lignes de SQL, mais autant faire simple, installez WP Security Scan qui se charge de ça tout seul comme un grand.

Supprimez des plug-ins

Les plug-ins sont parfois truffés de failles de sécurité.
Pour vous en convaincre, allez faire un tour chez le spécialiste du sujet, j’ai nommé Julio Potier le webmaster de Boite a Web.
Donc autant que possible limitez le nombre de plug-ins installés et dès que vous en désactivez un SUPPRIMEZ LE !
Car même inactifs certains plug-ins mal codés peuvent fragiliser votre installation …

Masquez le nom de votre thème

Tout comme les plug-ins, certains thèmes présentent des failles de sécurité.
Histoire de brouiller les pistes :

  • Modifiez le nom du répertoire de votre thème
  • Ouvrez le fichier styles.css de votre thème et changez le bloc suivant avec ce que vous voulez :
/*
Theme Name: mon-thème 1.0
Theme URI: http://adresse-de-mon-theme
Description: ah bah ...
Version: 1.0
Author: Moiiiii
Author URI: http://adresse-de-l-auteur
*/

Seul petit inconvénient : vous devrez faire d’éventuelles mises à jour de ce thème « à la main ».

Installez Cloudflare

Bon là on passe à un autre sujet … Je n’aborderai pas ici la question des performances (minification à la volée, semi-CDN, chargement JS asychrone, etc.) que propose Cloudflare, ni même son intégration au  projet Honey Pot qui permet d’arrêter les spammeurs (I loooooooove Cloudflare).

Mais je vous dirais juste ceci : en passant par Cloudflare comme CDN gratuit vous affichez au spammers et hackers les DNS de Cloudlfare, et vous serez donc protégés des attaques DDoS ainsi que de certaines injections SQL malicieuses 🙂

Pour installer Cloudflare rendez-vous ici :  https://www.cloudflare.com

Histoire de faire ceinture et bretelle j’ai également installé le plug-in  Bad Behavior même si je pense que ça devient pour le coup complètement inutile (vos avis sont les bienvenus d’ailleurs).

Verifiez que vous êtes bien protégés

Installez le plug-in WP Security Scan, suivez les indications proposées, puis supprimez le plug-in 🙂

Vous pouvez aller encore un cran plus loin en installant 6Scan SecurityBulletProof Security ou AskApache Password Protect mais mal utilisés ces plug-ins ont vite fait de mettre la grouille dans votre install… donc prenez vos précautions !

Et vous ? Vous ajouteriez quoi comme mesure efficace de sécurité ?

votes
Noter cet article
S’abonner
Notifier de
guest
42 Commentaires
le plus populaire
le plus récent le plus ancien
Inline Feedbacks
View all comments
Florian
Florian
7 février 2013

Merci pour ces infos 🙂

A noter aussi qu’il y a moyen d’utiliser un login mais d’avoir un alias qui permet d’afficher un autre nom que ce login sur le blog dans les commentaires par exemple.

Créer un blog
7 février 2013
Reply to  Florian

Je ne connaissais pas, de quel plug-in s’agit-il ?

Speedy
Speedy
7 février 2013

J’ai plusieurs sites qui utilisent wordpress, je vais donc me pencher sur leur sécurité mais ce que tu ne précises pas, c’est ce qui se passe lors des mises à jour, il faut donc que tu répètes les modifications dans functions par exemple à chaque fois ?

Créer un blog
7 février 2013
Reply to  Speedy

Rien a faire lors des mises à jour 🙂

Arnaud
Arnaud
7 février 2013

Hello Fabien,

Merci pour ces infos, c’est vrai que la sécurité d’un site comme WordPress est assez importante. Et tes solutions ont le mérite d’être facile à mettre en place.

Thierry
Thierry
7 février 2013

On le dit souvent, mais personne n’écoute… on commence par choisir un vrai mot de passe ! Et surtout pas le prénom du petit dernier 🙂

Sweetcig
Sweetcig
7 février 2013

J’ajouterai à tous ces conseils un peu pointus le fait de prendre soin de bien faire toutes les mises à jours des thèmes, des plugins et du wordpress lui-même… Je me suis déjà fait avoir sur des sites que je suivais peu, en passant à côté de a rectification d’une faille sur un plugin..

Créer un blog
7 février 2013
Reply to  Sweetcig

C’est vrai mais bon c’est tellement évident et répété partout comme conseil que je ne l’ai pas ajouté 😉

Pierre
Pierre
7 février 2013

Des petits conseils bien pratique pour limiter la casse sur WordPress, par contre cacher la version de WordPress est un peu inutile car la version est un partout dans WordPress, comme par exemple dans le feed et le readme.html à la racine …

Créer un blog
7 février 2013
Reply to  Pierre

Très bonne remarque j’ai ajouté ce conseil à l’article !
Merci 🙂

Rodrigue
Rodrigue
7 février 2013

Je reste perplexe sur Cloudfare, j’ai été déçu par les coupures intempestives, tu penses que c’est un problème sur ton site mais en faite c’est le CDN qui merdouille avec certaines pages . Tu constate pas ce cas de figure ?

Créer un blog
8 février 2013
Reply to  Rodrigue

J’ai eu BEAUCOUP DE MAL à configurer correctement Cloudflare avec pas mal de soucis au début.
Par contre depuis que j’ai les bons réglages c’est le bonheur.
Je n’ai eu qu’une fois un souci et j’ai du supprimer recréer un site sur le service. A part cet incident c’est que du bonheur :p

fred
fred
7 février 2013

Salut Fabien,
un petit détail que tu as oublié(à mon sens), faire une redirection https du wp-login avec double authentification via un .htaccess 🙂
Après tout mettre sur cloudflare doit être une sérieuse bonne idée, il me semble que korben à fait la même chose…

Créer un blog
8 février 2013
Reply to  fred

J’ai eu qq soucis quand j’ai voulu passe en https. En soi c’est une bonne idée mais c’est pas ultra simple a faire malgré les apparences. Je suis sur Cloudflare depuis 1 an sur tous mes sites et ça ne résout pas tout mais ça rend bien service c clair 😉

laura
laura
8 février 2013

Je n’ai pas vu « Mettre wordpress à jour », ce qui pour moi est quand même la première chose à faire!

Créer un blog
8 février 2013
Reply to  laura

C’est tellement évident … mais je l’ai rajouté merci 😉

Nicolas FORCET
Nicolas FORCET
9 février 2013

Je rajouterais : implémenter la double authentification avec l’excellent plugin Google Authenticator.
Cela réduit très grandement les chances de hacks et d’attaque type Man In The Middle si on accède au backoffice de son blog depuis des connexions peu sécurisées.
A+
Nico

Benjamin
Benjamin
10 février 2013

Ces conseils serviront bien vu le nombre de hack visant les sites wordpress. J’ai personnellement choisi d’installer better wp security qui corrige pas mal de « failles » de wordpress.
Etant donné qu’énormément d’ordinateurs sont infectés par des virus, je conseillerais également de ne jamais se connecter à wordpress depuis un ordinateur public et de mettre en place une connexion SSL à l’admin. Je compte le faire mais ça prend pas mal de temps.

A un moment j’avais voulu installer cloudflare mais ne l’avait pas fait après avoir lu que c’est une véritable passoire d’un point de vu sécurité. Du coup je compte installer incapsula à la place.L’article en question se trouve ici :
http://www.ehackingnews.com/2012/11/incapsula-vs-cloudflare-security-review.html

LIJE
LIJE
11 février 2013

Un bon article complémentaire à celui que j’avais rédigé il y a quelque temps. Tu donnes d’ailleurs certains points que je n’évoque pas.

Il faut aussi faire attention au thème payants de base retrouvés gratuitement sur des sites plutôt louche car ils peuvent contenir des codes malicieux. Dans ces cas là, j’utilise le module Theme Authenticity Checker (TAC) qui fonctionne très bien.

Andrian
Andrian
20 février 2013

rci pour tous ces conseils avisés. je ne manquerai pas de suivre vos recommandations dès que j’aurai un peu de temps devant moi pour le réaliser. A bientôt pour d’autres astuces

Pierre
Pierre
3 mars 2013

Merci pour ces astuces, bien utile !

Mike
Mike
7 mars 2013

Les mises a jour peuvent parfois causer plus de problemes qu’elles en corrigent, mais certaines mises a jour concernant la securite meritent d’etre attentivement considerees avant de refuser de ne pas les faire.

Geneviève
Geneviève
29 avril 2013

Merci pour ce billet fort utile. Si vous trouvez d’autres trucs du genre, je serais intéressée à lire d’autres billets sur le sujet! Je ne suis pas une computer geek, et ce genre d’explications facile d’accès m’aide beaucoup pour dans mon aventure dans le monde d’internet présente (j’ai un blog sur le parfum).

Nowis
Nowis
19 juin 2013

Merci pour toutes ces infos ! 🙂

Gabier
Gabier
28 juin 2013

Bravo pour ce tuto simple et réaliste.
Je me suis attelé à mettre en œuvre tout ça. Mais je ne suis pas un pro de WordPress et ça coince pour la fonction remove_author_class, que j’ai copié-collée, puis un peu « dépliée » sur 15 lignes. J’ai un plantage php

Fatal error: Cannot redeclare remove_comment_author_class() (previously declared in (ligne de déclaration de la function) in (dernière ligne (dernière accolade))

Pourtant la fonction a l’air correcte

Ca doit être gros comme le nez au milieu de la figure, mais je sèche. Au moins, est-ce que quelqu’un d’autre a copié collé cette fonction dans son functions.php ?

🙂 gabier

Créer un blog
28 juin 2013
Reply to  Gabier

Tu as copié en double le code !!!

gabier
gabier
28 juin 2013
Reply to  Créer un blog

Bonjour,
Merci de prendre du temps pour moi. Non je n’ai pas copié en double mais j’ai compris. Functions.php est chargé par le système, ce que j’ignorais car ce sont des fonctions utilisateurs et je le chargeais de nouveau dans mon header. D’où le problème, ta fonction était chargée deux fois.
Je contnue …

Créer un blog
29 juin 2013
Reply to  gabier

Ah oui en effet !!!
Il faut coller ça dans function.php (ou un autre fichier appelé lors d’un include depuis function.php) sinon ça va poser quelques soucis 😉

Tu peux également l’appeler d’ailleurs en faisant ainsi :
1 – Coller la fonction dans un fichier php
2 – L’appeler depuis ton header en utilisant include_once

Mais bon c’est un peu cracra comme méthode 😉

gabier
gabier
29 juin 2013
Reply to  Créer un blog

Oui, j’avais d’autres fonctions persos que j’avais mis dans un autre fichier de fonctions pour les inclure tranquillement moi-même.
Mais maintenant que j’ai compris comment marche functions.php, je vais tout mettre dedans, comme tu dis c’est plus propre.
Comme quoi j’ai encore à apprendre.
Merci
gabier

gabier
gabier
29 juin 2013

c’est encore moi,
j’ai une question sur le chapitre « protégez vos répertoires ». Bien sûr, c’est choquant que les répertoires ne soient pas interdit de lecture ni d’écriture.Mais l’interdiction deny dans htaccess n’interdit pas non plus l’écriture ni la lecture, elle interdit simplement d’accéder par navigation normale. Mais on peut y accéder autrement, par FTP (normalement protégé) et par programme php ou autre. Si un hacker peut entrer dans WordPress par une faille, il se trouve avec les permissions pour faire ça. Je me trompe ?
Le seul moyen d’empêcher de déposer du code malicieux dans un de nos fichiers semble être de les interdire en écriture. Est-ce possible ? Je ne sais pas. mais dans ce cas la protection des répertoires semble impossible.
Et changer leur préfixe est peut-être aussi efficace contre les robots des hackers.
Mais je dis peut-être des bêtises …
🙂 gabier

Créer un blog
29 juin 2013
Reply to  gabier

Tout est possible mais je te déconseille de jouer à ça car tu vas rendre certains plugins inutilisables et tu ne pourras plus les mettre à jour automatiquement

gabier
gabier
29 juin 2013
Reply to  Créer un blog

Justement, l’avis d’un spécialiste est précieux. Mais de quel « jeu » parles-tu ? Le changement de préfixe « wp » ? Certains le font pourtant voir
http://lashon.fr/wordpress-antispam-securite-site-web/#20-modifier-le-prfixe-wp-par-dfaut
Et que penses-tu de mon objection sur l’efficacité de la protection par htaccess ?
🙂 gabier

Créer un blog
29 juin 2013
Reply to  gabier

La modif du préfixe wp_ est tellement évidente que je ne l’avais pas ajoutée et WP Security Scan évoqué en dernier point le propose, mais je rajoute ce point pour être plus clair.

gabier
gabier
3 juillet 2013

Bonjour,
A propos de la limitation du nombre de demandes de connexion, c’est intéressant et j’ai bien lu mais il me reste des questions: si on a un blog en accès libre, est-ce que ça marche aussi pour l’administrateur ? Et est-ce que l’administrateur peut débloquer pour pouvoir entrer lui-même si quelqu’un d’autre l’a bloqué?
🙂 gabier

Créer un blog
19 août 2013
Reply to  gabier

J’ai souvent ce type de problème justement
Dans ce cas je vide les bases de données à la main (avec PHPmyAdmin) et/ou je désactive le plugin temporairement en changeant le nom du répertoire du plugin via FTP
Je sais c’est galère…

Yann
Yann
2 septembre 2013

Bonsoir,
Justement je ce WE je dois mettre en place un nouveau site qui tournera sous WP.
Ce tuto me sera bien utile. Bien que je n’ai pas tout à compris l’intégralité de l’utilité de certains points. Notamment de masquer le nom du thème. Si ce n’est éviter que des malins aille fouiller. Mais bloquer l’accès au dossier suffirait non ?

Amicalement, Yann.

Ayok
Ayok
28 novembre 2014
Reply to  Yann

Bonjour,

j’essaie de suivre le tuto, merci, il y a beaucoup d’informations utiles.

Par contre (je sais que cela doit paraitre évident), quand on parle DU fichier functions.php, on parle bien de celui dans « wp-includes »? Car j’en trouve plusieurs dans l’arborescence.

Quand j’essaie d’ajouter les bouts de code afin de masquer le compte admin ou pour masquer la version, cela me sort les erreurs:
Fatal error: Call to undefined function remove_action() in /home/lesavprg/www/wp-includes/functions.php on line 22
et
Fatal error: Call to undefined function add_filter() in /home/lesavprg/www/wp-includes/functions.php on line 18

ce qui parait logique car elles ne sont définies nul part dans le fichier, doit on modifier le fichier functions.php pour en inclure un autre? Où est-il sensé allé chercher les fonctions « add_filter() » et « remove_action() »?

Merci beaucoup!

Créer un blog
28 novembre 2014
Reply to  Ayok

On parle du fichier functions.php qui se trouve dans le dossier de votre thème, soit qqchose comme /wp-content/themes/votre-theme/functions.php

Stephane
Stephane
19 mai 2015

Merci pour cet article complet et bien écrit …
Perso j utilise soit Wordfence soit Itheme security afin de sécuriser facilement les sites wordpress de mes clients …
Pour ceux qui ont hébergé leur site WordPress chez OVH il y a un soucis de comparabilité avec le plugins de sécurité Acunix.

Stephane
Stephane
20 mai 2015

Bonjour
Merci pour cet article très complet
Les sites worpress hébergé chez OVH rencontre un problème de compatibilité avec l extension de sécurité Acumix …
je vous recommande d utiliser soit Itheme sécurité soit Wordfence afin de sécuriser facilement votre site WordPress.
Certain plugins WordPress comportent des failles de sécurité …et ces extensions sont parfois incompatible entrent elle…
Si votre site wordpress plante suite a l installation d un de ces plugin pas de panique …connectez vous via le ftp …. allez dans le dossier wp-content ….puis plugins et renommer l extension qui pose problème exemple :itheme security deviendra ithemesecurity1 et voila ca remarche !

Stephane
Stephane
4 juillet 2015

Merci pour toute ces info utiles je vous recommande d installer le plugin de sécurité Itheme security il est simple d utilisation et bien noté par les utilisateurs.

Jm
Jm
27 décembre 2015

Bonjour,
Article intéressant, merci.
Cependant, je souhaite ajouter ma contribution qui permet de détecter les fichiers suspects du wp-upload et de les supprimer : https://wordpress.org/plugins/scan-upload-par-jm-crea/
Le plugin détecte les fichiers : php, javascript, htaccess, exe, sql, zip, rar, czip, tar.gz