Savez-vous que WordPress est une cible privilégiée des pirates ?

Non pas qu’il soit plus vulnérable qu’un autre CMS mais surtout parce qu’il propulse à lui seul plus de 40% des sites dans le monde et que par conséquent, il a plus de chance d’être attaqué.

D’ailleurs, des mises à jour de sécurité sont régulièrement faites par les équipes de développeurs de la société mère de WordPress, Automattic pour parer d’éventuelles attaques.

En fait, ce qui rend surtout WordPress faillible, c’est l’utilisation que l’on en fait ; installer n’importe quel thème ou plugin, ne pas faire les mises à jour sont, par exemple, des erreurs qui induisent de potentielles failles de sécurité.

C’est pourquoi il est absolument indispensable de mettre en place certaines mesures et d’adopter quelques bonnes pratiques afin de sécuriser au mieux votre site internet.
Je ne le répéterai jamais assez : lorsque vous créez votre site, la sécurité est à prendre très au sérieux.

Et ne vous dites pas que vous passerez au travers d’un piratage parce que votre site à vous, est un petit site qui n’intéresse personne ou qu’il n’y a aucun enjeu derrière.
Tout le monde, absolument tout le monde peut subir une attaque.

Et ce, pour plusieurs raisons, je vous en donne ici quelques-unes :

➛ D’abord, parce que votre site piraté, aussi petit soit-il, apporte de la puissance supplémentaire au hacker qui prépare une attaque plus forte par la suite.
➛ Ensuite, parce qu’en injectant un script dans votre code, le pirate redirige votre site vers un site pas très net, si vous voyez ce que je veux dire… Qui n’est jamais tombé sur un site vendant la petite pilule bleue par inadvertance !? 😉
➛ Ou parce que vous avez des données personnelles, collectées via un formulaire de contact par exemple, qui peuvent intéressées les pirates.
➛ Ou pire, vous avez un site e-commerce, les données bancaires transitent peut-être par votre serveur… et voilà un joli moyen de vous faire du chantage.

Vous l’avez compris, vous n’êtes pas à l’abri d’un méchant pirate.

Et comme il vaut mieux prévenir que guérir, je vous donne ici quelques conseils et pratiques à mettre en place pour renforcer la sécurité de votre site web et ainsi, éviter de vous arracher les cheveux pour le remettre en bon état de fonctionnement.

S’assurer de la sécurité de son hébergeur

Vous débutez à peine dans le web et vous n’avez pas envie d’investir pour le moment dans l’hébergement ?
C’est une raison qui se vaut mais évitez tout de même les hébergeurs gratuits ou low cost, ils ne garantissent en rien la sécurité.
Optez plutôt pour une solution pas trop coûteuse et surtout fiable.
Il en existe de bonnes sur le marché qui proposent des formules pour démarrer pas très chères.
Si je devais vous en recommander un, ce serait le français o2Switch. Il a un support très réactif et encore plein d’avantages mais ce n’est pas le sujet ici.

Mettre son site en https

Aujourd’hui, ce n’est plus envisageable d’avoir un site qui ne soit pas sous ce protocole. La plupart des hébergeurs proposent d’ailleurs le certificat gratuit Let’s encrypt qui vous permet de passer en https.
Si vous ne l’avez pas encore fait, installez le vite sur votre site car Google risque de pénaliser votre référencement et de faire fuir vos visiteurs en affichant une alerte rouge qui fait bien peur !

Éviter de garder « admin » comme identifiant

Sur les anciennes versions, WordPress créait, par défaut, un 1er utilisateur ayant les droits d’administrateur sous l’identifiant « admin ».
Aujourd’hui, beaucoup ont gardé cet identifiant. Si c’est votre cas, vous pouvez encore créer le vôtre en prenant soin de transférer le contenu créé sous « admin » vers votre nouveau profil d’administrateur.
Si vous n’avez pas d’inscription ouverte sur votre site, supprimez ensuite l’ancien « admin » car les pirates testeront cet identifiant en premier pour accéder à votre site.
Par contre, si les utilisateurs peuvent s’inscrire sur votre site, laissez « admin » avec le rôle abonné.
Optez pour un identifiant complexe, évitez vos nom, prénom et nom de site.

Choisir un mot de passe complexe

C’est du bon sens mais avouons que par flemme, on ne le fait pas toujours !
N’hésitez pas à combiner majuscules, minuscules, chiffres, caractères spéciaux etc… Même si c’est « légèrement » pénible de trouver un bon mot de passe pour chaque site, c’est vraiment la base de la sécurité.
Dans tous les cas, évitez de choisir votre prénom ou celui de votre entourage ni quelque chose en rapport avec votre site.
Sachez qu’il existe des générateurs de mot de passe en ligne qui peuvent vous simplifier la vie.
Et si vous souhaitez centraliser tous vos identifiants et mots de passe en un seul endroit, il y a des sites comme Dashlane qui vous le permettent et vous éviteront ainsi les tracas liés aux oublis.

Vérifier la qualité du thème et des plugins

Avant chaque installation, pensez à vérifier la qualité de vos thèmes et plugins. Ils peuvent, en effet, embarquer des failles de sécurité potentielles avec eux.
Pour cela, si vous les prenez dans le répertoire officiel de WordPress, lisez bien les avis des utilisateurs, le nombre d’installations actives, les dernières dates de mise à jour et la réactivité du support, cela vous donnera déjà quelques précisions.
Si vous les achetez directement sur un site, faites une petite recherche Google pour vous faire une idée.
Et surtout, testez toujours vos thèmes ou plugins en local ou sur un clone, ça vous évitera de prendre le risque de casser votre site en ligne.

Mettre à jour WordPress, les thèmes et les plugins

Mettez à jour régulièrement votre WordPress ainsi que vos thèmes et plugins, c’est la meilleure façon d’éviter d’éventuelles failles de sécurité.
Pensez aussi à mettre à jour ceux qui sont inactifs, ce n’est pas parce qu’ils ne sont pas activés qu’ils ne présentent pas un danger. Et de toute façon, il vaut mieux supprimer tout ce que vous n’utilisez pas.
Je vous conseille de laisser faire WordPress les mises à jour mineures automatiquement.
Par contre, pour les mises à jour majeures, il vaut mieux attendre un peu le temps que les potentiels bugs et failles soient repérés et corrigés.

Changer le préfixe des tables

Par défaut, WordPress utilise un préfixe de tables qui est le même pour toutes les installations (wp_).
Si vous le laissez, vous prenez des risques pour la sécurité de votre site, notamment en terme d’injections sql dans votre base de données.
Si vous n’avez pas, lors de l’installation de votre WordPress, précisé un préfixe de tables différent, vous pouvez le faire, par la suite, avec un plugin.

Accorder les bonnes permissions aux dossiers et fichiers

Pour donner les bonnes permissions aux dossiers et fichiers, il faut configurer le CHMOD via votre FTP.
Le principe est de ne pas être trop permissif pour éviter que tout le monde y est accès ni trop restrictif afin de ne pas empêcher le bon fonctionnement de WordPress.
WordPress recommande 750 ou 755 pour les dossiers, 640 ou 644 pour les fichiers et 400 ou 440 pour le fichier wp-config.php.

Installer un plugin de sécurité comme iThemes Security, Secupress ou Wordfence

Personnellement, j’ai une préférence pour iThemes Security qui, dans sa version gratuite, est déjà très complet et je le trouve également très pédagogique puisqu’il explique chaque fonctionnalité.
Secupress est aussi très bien, déjà parce que c’est un français qui l’a développé, et donc le plugin est en français mais surtout parce son interface est très intuitive et bien sûr, je le trouve efficace. Dans sa version gratuite, il propose déjà un bon nombre de fonctionnalités comme, par exemple, le déplacement de la page de connexion.
Wordfence est aussi intéressant mais un peu une usine à gaz pour les novices.

Déplacer la page de connexion vers une autre page

Votre page de connexion par défaut est monsite.com/wp-admin, si un pirate ou un robot veut se connecter à votre administration, rien de plus simple pour lui de trouver votre page.
L’idée est de lui compliquer un peu la tâche en déplaçant cette page vers une autre que vous nommerez à votre guise comme monsite.com/manouvellepage.
Plusieurs plugins le font comme WPS Hide Login, Secupress peut le gérer également.

Bloquer les attaques de type « brute force »

Une attaque de force brute vise à trouver votre identifiant et votre mot de passe par de multiples tentatives.
Vous pouvez limiter ces tests en les bloquant au bout d’un nombre et d’un temps que vous définissez.
iThemes Security le propose dans sa version gratuite mais d’autres plugins comme Login Lockdown le font également.

Installer l’authentification à 2 facteurs

Pour bloquer encore davantage les attaques de type « brute force », vous pouvez également mettre en place un système d’authentification à 2 facteurs. Le principe étant d’avoir, outre votre mot de passe, un autre code à rentrer pour accéder à votre tableau de bord. Ce code peut être envoyé sur votre téléphone ou votre boite mail, ce qui limite vraiment ce type d’attaques.
Plusieurs extensions proposent cette fonctionnalité comme Google Authenticator.

Masquer les erreurs de connexion

Lorsque vous faites une erreur d’identifiant ou de mot de passe lors de votre connexion, WordPress affiche un message d’erreur assez explicite, ce qui donne des informations plutôt utiles aux hackers. En les masquant, vous ne leur facilitez là pas encore les choses.

Voici le code à ajouter à votre fichier functions.php :

add_filter('login_errors', 'wpm_hide_errors');
function wpm_hide_errors() {
// On retourne notre propre phrase d'erreur
return "L'identifiant ou le mot de passe est incorrect";
}

Masquer la version de WordPress

Pour trouver de potentielles failles de sécurité, il faut d’abord regarder la version utilisée de WordPress, pensez donc à la cacher avec ce code à mettre dans votre fichier functions.php :

remove_action('wp_head', 'wp_generator');

Désactiver l’éditeur de fichiers du tableau de bord

C’est important de désactiver cet éditeur pour 2 raisons. La 1ère est que si vous avez plusieurs administrateurs sur votre site, certains d’entre eux peuvent éditer les fichiers du site sans trop savoir ce qu’ils font, et tout bonnement casser le site.
D’autre part, si votre site est piraté, et que le hacker a accès à votre tableau de bord, il aura aussi accès directement à tous vos fichiers et pourra injecter très facilement du code malveillant.

Voici le code à ajouter à votre fichier wp-config.php :

define('DISALLOW_FILE_EDIT', true);

Changer les clés de sécurité du fichier wp-config.php

Ces clés créent un cookie d’identification qui protège votre site, il vaut mieux les ajouter si elles ne sont pas présentes ou les changer.
Vous pouvez les créer via ce générateur de clés.

Voici à quoi elles ressemblent :

define('AUTH_KEY', 'hlm%gyx:p~RQ|++Qg}F9+BVSE >MV}H9cp8g+msa.WBr({?Wg1NCtNXI!zAAUwk6');
define('SECURE_AUTH_KEY', '{Y;;oqRyFAak;+nKu^P?oMP;d]-N~g zLkI$l+Xw>Q~ALFPL^{~|ql^B~S.C');
define('LOGGED_IN_KEY', ')JX@3m.>uucCE+,XK!]C6)u|o,HY$@93HQUb[ liaI}r1@vS6@-+XMlD]-][s;i');
define('NONCE_KEY', 'mQuO7f2R^VLaQV]-sEi.69IqL4]-|7O-3e|rZy^c};jNxM9M+6OS%sV87UEl!G');
define('AUTH_SALT', '@*&|h@4.{g+|/ @DnAM%6FP3BQOT[Ta%0s/?|7G~jR!x~FziK,-Nno>moS1Kp@rb');
define('SECURE_AUTH_SALT', '^:}R</Mvq9|B[>/e}]~+h -.{_k#s,Lmll5PfHB9tj#/,Mg_&E4B3 FW?Kt2t&');
define('LOGGED_IN_SALT', '_<lbp2E4uMdZ>ofD-dNp$gI*?/5eVh?:U:=Y.h%X]Ap~09xyWq8#5l@eB?J|MA');
define('NONCE_SALT', '8._L-#%>#,7f+44z*Ehy/(pqv-XgfVwqmf;sjbR(|l-tcR$|H1xY#9TT#Q6YJ?');

Protéger les fichiers

Par défaut, tout le monde peut avoir accès à vos fichiers, ce qui donne une mine d’informations aux pirates, il vaut mieux donc penser à les protéger.
Il s’agit là encore de rentrer des morceaux de code mais dans votre fichier .htaccess :

Pour désactiver l’affichage des répertoires :

Options All -Indexes

Pour protéger le fichier wp-config :

<files wp-config.php>
Order allow,deny
Deny from all
</files>

Pour protéger les fichiers .htaccess et .htpasswds :

<Files ~ "^.*\\.([Hh][Tt][AaPp])">
Order allow,deny
Deny from all
</Files>

Pour protéger le fichier xmlrpc.php :

<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>

Pour protéger les fichiers de version :

<FilesMatch "^(readme.html|readme.txt|README.txt|README.md|changelog.txt|license.txt|LICENCE.txt|LICENCE)">
Order allow,deny
Deny from all
</FilesMatch>

Renforcer la sécurité avec ces morceaux de code à ajouter au fichier .htaccess :

N’oubliez pas de remplacer monsite.com par votre nom de domaine

Pour masquer les informations du serveur :

ServerSignature Off

Pour éviter que l’on découvre l’identifiant d’un auteur :

<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]
</IfModule>

Pour éviter le spam de commentaires :

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\\.php*
RewriteCond %{HTTP_REFERER} !.monsite.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
</IfModule>

Pour désactiver le hotlinking de vos images :

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\\.)?monsite.com [NC]
RewriteRule \\.(jpg|jpeg|png|gif)$ http://fakeimg.pl/400x200/?text=Pas_touche_aux_images [NC,R,L]

Pour bloquer l’utilisation de certains scripts :

RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]

Pour se protéger des injections de fichiers :

RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\\.\\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule .* - [F]

Pour se protéger des attaques diverses (En-têtes de sécurité : HSTS, XSS, XFO etc…) :

<ifModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-XSS-Protection "1; mode=block"
Header always set X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options: "nosniff"
Header set X-Permitted-Cross-Domain-Policies "none"
Header set Referrer-Policy "no-referrer"
Header set Expect-CT 'enforce, max-age=43200, report-uri="https://somedomain.com/report"'
Header set Permissions-Policy "camera=(); geolocation=(); microphone=();"
</ifModule>

Sauvegarder régulièrement le site

Enfin, dernier conseil et pas des moindres, sauvegardez régulièrement votre site avec un plugin comme Updraftplus.
En cas de pépin, que ce soit un piratage ou un plantage du site, vous pourrez vite rebondir en réinstallant votre sauvegarde. Pensez à faire des sauvegardes régulières et ne vous reposez pas uniquement sur celles de votre hébergeur car il suffit que celui-ci se fasse lui même piraté pour que votre site et vos sauvegardes le soient également.
Et un dernier petit conseil pour la route, gardez bien vos sauvegardes sur plusieurs mois car un petit malin de pirate peut très bien s’infiltrer dans votre site et ne se déclarer que quelques temps après, et là ce n’est pas votre dernière sauvegarde infectée qui pourra vous aider.

Voilà pour tous ces conseils et bonnes pratiques, si vous les appliquez, vous devriez être plutôt tranquille car votre site se rapprochera d’une petite forteresse !