Si vous êtes blogueur ou webmaster, vous connaissez surement ce sentiment de crainte lorsque vous voyez le site d'un ami se faire pirater. Vous vous dites "A quand mon tour ?"
D'ailleurs, peut être que cela vous est déjà arrivé et c'est pour cela cette série d'articles vous intéresse.


Avant toute chose, sachez que rien n'est in-piratable. Le hacker arrivera toujours à ses fins s'il est motivé et qu'il en a les moyens. Le but de la manoeuvre est donc de le ralentir au maximum afin qu'il se décourage rapidement. Pour cela, il existe des paramétrages simples à mettre en oeuvre pour sécuriser au maximum votre installation WordPress sans avoir besoin de connaissances pointues en administration système.

Si vous êtes négligent, vous pouvez perdre en un claquement de doigts le travail de plusieurs années à cause d'un piratage (et d'une politique de sauvegarde mal fichue). Au contraire, en respectant les quelques règles de base que je vais vous apprendre dans ces articles, vous pouvez dormir sur vos 2 oreilles.

Voici grosso modo, le planning que j'ai prévu en terme de contenu :

  • Introduction - Mise en bouche (l'article que vous êtes en train de lire)
  • Premiers Conseils (Pour les débutants et qui concerne WordPress)
  • Les plugins pour sécuriser WordPress
  • Les techniques de sécurisation avancées (Pour aller un peu plus loin et qui concernent plus le serveur que WordPress en lui-même)

Ça va faire un paquet d'articles, mais on n'est pas pressé ;-) J'essayerai d'être exhaustif et d'être le plus précis possible.

Environnement

Que vous ayez déjà installé WordPress ou que vous souhaitiez partir d'une installation fraiche, je vous expliquerai les 2 cas de figure.
L'environnement sur lequel je me base pour mes explications est de type LAMP (Linux Apache MySQL PHP), mais si vous installez votre WordPress sur un serveur Windows ou un Mac OSX, les conseils dispensés dans ces articles seront tout aussi valables à quelques détails prêts.

Les fichiers

Dans ce guide, je vous parlerai de plusieurs fichiers à éditer. Pour ceux qui ne seraient pas familiers avec ce genre de fichiers, voici leur description rapide.

  • php.ini : Il s'agit du fichier de configuration de PHP présent en général dans /etc./.
  • wp-config.php : Il s'agit du fichier de configuration de WordPress qui contient entre autres des clés de chiffrement et les accès à la base de données
  • .htaccess : Il s'agit de fichiers qui se placent à la racine des répertoires et qui permettent de configurer le comportement d'Apache pour ces répertoires spécifiques.

Attention à ce que vous faites quand vous manipulez ces fichiers. La moindre coquille peut rendre indisponible votre site. Pensez donc toujours à réaliser une sauvegarde du fichier avant de l'éditer, à moins que vous ne soyez sûr de vous à 100%.

Les risques

Même si WordPress et ses plugins sont régulièrement mis à jour, il existe des exploits, c'est à dire des méthodes qui permettent de pirater votre site ou votre serveur. Injections SQL, failles RFI (Remote File Inclusion), failles RFE (Remote File Execution), XSS voire des choses un peu plus triviales comme des attaques par dictionnaire, sont de la partie.

Ces risques existent à cause de logiciels ou scripts non mis à jour, d'infections répandues via d'autres sites hébergés sur le même serveur que le vôtre (dans le cas de serveurs mutualisés) ou encore parce que l'un de vos mots de passe a fuité. Se rendre compte d'un piratage n'est pas toujours évident. La dernière fois, j'ai vu un cas de redirection vers une copie très bien faite d'un site. Et cette redirection ne s'effectuait que si vous veniez du moteur de recherche Google et pas en direct. Piratage discret donc, mais une perte de visites et de référencement pour le site original. La copie hébergée en Chine affichait quasiment le même contenu, mais avec des tas de pubs en plus et des scripts d'infections pour les internautes. Car on n'y pense pas, mais sécuriser son site, c'est aussi protéger ses visiteurs.

Rassurez-vous, même si sur le net, rien n'est sécurisé à 100%, les conseils que je vais vous donner vous permettront de vous protéger un maximum contre tous ces risques. Ce sera plus efficace qu'une prière et une assurance hors de prix ;-).

Connaissances à avoir

Ces articles s'adressent aux débutants. Toutefois certaines astuces impliquent que vous connaissiez un minimum de choses comme des commandes Linux ou la syntaxe PHP ou MYSQL.
Je vais donc partir du principe que vous connaissez un peu de HTML, que vous savez éditer un fichier, vous connecter à un FTP...etc.

Au-delà de ça, l'objectif pour vous en terme de connaissance est de bien comprendre comment fonctionnent :

  • Votre environnement système (Linux, Apache, MySQL, PHP) et prendre conscience que chacune de ces briques peut avoir son lot de faiblesses.
  • Votre application et prendre conscience que WordPress peut contenir des failles, mais aussi (et surtout), les plugins que vous utilisez, ou les thèmes ou encore les comptes utilisateurs (droits, force du mot de passe...etc.).

Maintenant que je vous ai mis l'eau à la bouche, voici donc le premier tuto qui concerne la sécurisation préinstallation.

Lors du processus d'installation

Lorsque vous installez WordPress, vous suivez une liste d'étapes assez simples dont une qui vous demande d'indiquer le nom de la base de données, l'identifiant MySQL, le mot de passe MySQL, l'adresse de la base de données et le préfixe des tables.

On va donner des noms totalement farfelus à tout ça, histoire d'éviter les classiques admin, wordpress et wp_ trop facilement devinables.

Création de la base

Avant de laisser WordPress s'installer, on va lui créer un utilisateur MySQL rien qu'à lui afin d'éviter d'entrer l'utilisateur root pou l'accès à la base. Pour cela, je pars du principe que vous avez phpmyadmin  installé ou que vous connaissez les commandes MySQL. Notez que vous pouvez aussi temporairement utiliser un outil comme celui-ci que vous supprimerez ensuite de votre serveur.

Connectez-vous à phpmyadmin et ajoutez un nouvel utilisateur. Pour le nom, je vous recommande de taper quelque chose d'assez long et de complètement aléatoire... Pour cela, on peut utiliser un générateur de mot de passe comme celui-ci.

Par exemple, moi j'ai généré "V2aRtm85Z4_wp" pour le nom et "XuwYvchCDBSbPALH" pour le mot de passe. Dans la section host, choisissez localhost, puis cochez la case qui dit que vous créez une base de données avec le même nom que celui de l'utilisateur. On peut aussi créer la base après avec un autre nom et y associer ensuite l'utilisateur. À vous de voir.

phpmyadmincreationutilisateur

phpmyadminprivileges

Ensuite, connectez-vous à votre site et entrez les paramètres de votre base fraichement créée dans WordPress. Pour le préfixe, ne laissez pas wp_, mais générez un autre truc. Par défaut, toutes les tables WordPress contenues en base de données commencent par le préfixe wp_. Un attaquant pourra facilement deviner le nom de vos tables pour tenter des injections SQL à moins que vous ne changiez ce préfixe.

Par exemple mon préfixe sera "j1EQgK17g6_"

Changer le préfixe sur une installation WordPress existante

Si vous avez manqué cette chance, sachez qu'il est possible de modifier le préfixe des tables après coup. Avant tout chose, faites une sauvegarde complète de votre base MySQL.
Désactivez ensuite tous vos plugins puis lancez la requête SQL suivante. Notez qu'ici, je remplace le préfixe wp_ par le préfixe j1EQgK17g6_

Ce sont des commandes SQL, mais vous pouvez aussi très bien faire tout ça à la main avec la fonction "renommer" de Phpmyadmin.

RENAME table `wp_commentmeta` TO `j1EQgK17g6_commentmeta`;
RENAME table `wp_comments` TO `j1EQgK17g6_comments`;
RENAME table `wp_links` TO `j1EQgK17g6_links`;
RENAME table `wp_options` TO `j1EQgK17g6_options`;
RENAME table `wp_postmeta` TO `j1EQgK17g6_postmeta`;
RENAME table `wp_posts` TO `j1EQgK17g6_posts`;
RENAME table `wp_terms` TO `j1EQgK17g6_terms`;
RENAME table `wp_term_relationships` TO `j1EQgK17g6_term_relationships`;
RENAME table `wp_term_taxonomy` TO `j1EQgK17g6_term_taxonomy`;
RENAME table `wp_usermeta` TO `j1EQgK17g6_usermeta`;
RENAME table `wp_users` TO `j1EQgK17g6_users`;

Lancez ensuite cette commande SQL pour rechercher toutes les mentions de wp_ dans la table options et les remplacer par j1EQgK17g6_ (Ou utiliser la fonctionnalité de recherche de Phpmyadmin) :

UPDATE `j1EQgK17g6_options` SET `option_name` = REPLACE (option_name,'wp_','j1EQgK17g6_') WHERE `option_name` LIKE '%wp_%';

Et éditez chaque enregistrement retourné.

Ensuite, même punition pour la table Usermeta :

UPDATE `j1EQgK17g6_usermeta` SET `meta_key` = REPLACE (meta_key,'wp_','j1EQgK17g6_') WHERE `meta_key` LIKE '%wp_%';

Ajoutez ensuite votre nouveau préfixe dans le fichier wp-config.php en modifiant ou ajoutant la ligne suivante, pour indiquer à WordPress le nouveau préfixe :

$table_prefix  = 'j1EQgK17g6_';

nanoprefixwpconfig

Normalement, ça devrait être bon. Réactivez vos plugins et faites un petit tour sur le site pour vérifier que tout est OK.

Une autre méthode consiste à exporter en SQL (fichier texte) l'intégralité de la base, puis à faire un rechercher/remplacer dans celle-ci pour modifier toutes les occurrences de wp_ et enfin, réimporter cette base modifiée, mais c'est un peu plus lourd et source d'erreur, donc je vous le décommande.

Enfin, certains plugins permettent de faire cela plus facilement. Allez jeter un oeil à db-prefix-change ou change-table-prefix.

Fin de la parenthèse sur l'install existante. On retourne à notre installation maintenant.

Fin de l'installation

configwp

Pensez aussi à bien mémoriser tous ces mots de passe afin de pouvoir les retrouver plus tard. Copiez ensuite le code donné par WordPress et collez-le dans un fichier que vous nommerez wp-config.php à la racine du blog.

wpconfig

L'étape suivante consiste à créer entre autres choses, un compte "Administrateur" sur le site. Une des règles de base lorsqu'on installe un WordPress, c'est de changer le login utilisé par l'administrateur. Si vous gardez admin ou root, un attaquant pourra plus facilement tester tous les mots de passe via un simple bruteforce (attaque par dictionnaire) et accéder à votre interface admin WordPress.

Choisissez quelque chose que vous pouvez retenir, mais qui ne soit pas si évident à deviner. Par exemple, moi j'ai choisi : _K0Rb3n_

Et en mot de passe, j'ai régénéré un truc à rallonge que je devrais mémoriser : $jaimebienlaglaceauchocol4t%

Si vous voulez changer ce login sur une installation de WordPress déjà en place, exécutez simplement la commande SQL suivante en remplaçant la mention nouvelutilisateur par le login de votre choix (en tenant bien compte que ma table a été wp_users renommée en 1EQgK17g6_users) :

UPDATE 1EQgK17g6_users SET user_login = 'nouvelutilisateur' WHERE user_login = 'admin';

Pour l'email, c'est mieux si vous utilisez une boite connue de vous seul, avec un mot de passe costaud et des réponses aux questions secrètes pas trop simples. Cela évite qu'un pirate hack d'abord votre boite mail pour faire ensuite une récupération de mot de passe perdu. Eh oui, la sécurité, ça se pense de bout en bout. Il y a quelques années, j'ai vu le cas d'un pirate qui avait simplement récupéré un accès email en répondant à une question secrète trop simple et qui avait pu de fil en aiguille récupérer les accès à tout un tas de sites, simplement en faisant des demandes de mot de passe perdu.

wordpresscreationuseradmin

Passez à l'étape suivante et voilà, votre blog est en place. Vous pouvez maintenant vous authentifier avec le login et le mot de passe indiqué précédemment.

Voilà pour ce premier tuto.

Voici les tutos suivants :