Sécuriser un site WordPress

Dès qu'un site Web est publié, il est exposé à des attaques. Ceci est vrai peu importe le langage ou la technologie utilisée. C'est pourquoi WordPress met à votre disposition des mécanismes de protection contre de telles attaques.

Les sections suivantes exposent quelques-unes des protections dont vous devez absolument tenir compte.

▼Publicité

Précautions lors de l'installation initiale du site

Sécurité

Source : http://commons.wikimedia.org

Lors de l'installation initiale de WordPress, vous devez respecter les consignes suivantes :

  • Le compte permettant d'accéder au panneau de configuration NE DOIT PAS porter le nom admin (voir la section « Modifier l'usager admin du site »).
  • Dans la base de données, le nom des tables NE DOIT PAS débuter par wp_ (voir la section « Renommer les tables WordPress »).
  • Dans le fichier wp-config.php, prenez soin de générer les clés d'authentification selon la procédure indiquée.

    Ex :

    Fichier wp-config.php

    /**#@+

     * Clefs uniques d'authentification et salage.

     *

     * Remplacez les valeurs par défaut par des phrases uniques !

     * Vous pouvez générer des phrases aléatoires en utilisant 

     * {@link https://api.wordpress.org/secret-key/1.1/salt/ le service de clefs secrètes de WordPress.org}.

     * Vous pouvez modifier ces phrases à n'importe quel moment, afin d'invalider tous les cookies existants.

     * Cela forcera également tous les utilisateurs à se reconnecter.

     *

     * @since 2.6.0

     */

    define('AUTH_KEY',         'E@&0zPGi1M~eI2Q1v>>Q3N:%O1H&kRN;$+6O(M! H;|+3aTmH7z8E>pG.NVttVds');

    define('SECURE_AUTH_KEY',  'V*BA/Vi#Zyj7_EwJnw$R|7TMboqn92|2C-?gB>g3 m,++cZ+|C$2dUSC9z_Lz{Z6');

    define('LOGGED_IN_KEY',    'eD*cSKR9h4GY;SmlT>}l|d-g4WG;~TSy_gfG9 u0MT/TpaX-6V2._0[HYB%WyyNp');

    define('NONCE_KEY',        'Sp]HIK[hzMHX,z-:j<X2l?C#,l-W.>kn 8b,4I&*l7oC*n#!|*e|@ 0C)!k+dUcq');

    define('AUTH_SALT',        'BZ9b=EyK|wU4[aSkuIyu|=8ypcKyDJk WI?^GzuI8ult/q[6^y(=C;Vor49_UjN{');

    define('SECURE_AUTH_SALT', 'Y v_Ea3|[n|SP<C-n7(q|pUSi-37x]socWRhq3#oM2[|x<DqKgoU1yeP,f-4$vyp');

    define('LOGGED_IN_SALT',   '=j.[>xDBE=-ZX7Qv-k|@L]:qUfYi]$3WtHQmv^6t<Uae{ap^JJ$P,NYii!:5><cT');

    define('NONCE_SALT',       '_c40[kkC~m!C^{2wlK$_=VzMPnfEx6E]gZ8Cqdq _pOWbsa1$WC7Kn%tnA,h?c?-');

    /**#@-*/

  • Bien que les serveurs récents protègent automatiquement les fichiers .php, assurez-vous que votre serveur contienne les configurations nécessaires pour que le fichier wp-config.php ne puisse pas être vu par les internautes (il contient en clair le code d'accès à votre BD).

    Ex. sous Apache :

    Fichier .htaccess

    # Protect wp-config.php

    <Files wp-config.php>

        order allow,deny

        deny from all

    </Files>

  • Cachez le numéro de version de WordPress afin que les hackers ne puissent trouver rapidement les failles de sécurité (attendez de développer votre thème enfant avant d'essayer de cacher ce numéro). Une technique intéressante est exposée dans la fiche « Cacher le numéro de version de WordPress ».
  • Le numéro de version apparaît également dans le fichier wordpress/readme.html. Ce fichier ne doit pas être copié sur le serveur.
  • Assurez-vous que le dossier plugins ne contienne que les extensions que votre site utilise. Si vous désirez tout de même conserver une extension qui n'est pas utilisée, déplacez ses fichiers dans le dossier dev. Ceci facilitera vos mises à jour et évitera d'éventuels trous de sécurité.
  • Assurez-vous que le dossier themes ne contienne que le thème que le site utilise ainsi que son thème parent s'il y a lieu.

Modifier l'usager admin du site

Si votre site possède un usager qui s'appelle admin, c'est certain que les utilisateurs malveillants vous seront reconnaissants. Vous devez donc absolument créer un nouvel usager puis détruire votre usager admin.

  • Choisissez le nom de login de votre nouvel usager. Ce doit être un nom difficile à deviner. Évitez donc d'utiliser votre nom, le nom de votre site, etc. Vous pouvez même utiliser un nom qui n'est pas un mot. Ce pourrait être, par exemple, un nom formé de la première lettre de chaque mot d'une phrase facile à retenir.
  • Trouvez un mot de passe tout aussi difficile à deviner.
  • Dans le panneau de configuration de votre site, créez un nouvel utilisateur et donnez-lui le rôle Administrateur. Attention : on parle ici d'un usager dans WordPress et non d'un usager dans MySQL.
  • Déconnectez-vous du panneau d'administration.
  • Reconnectez-vous en utilisant le nouvel usager.
  • Détruisez le compte admin. Si l'usager admin a déjà écrit des pages ou des articles, WordPress vous donnera le choix de les détruire ou de les attribuer à un autre utilisateur.

Protéger sa base de données : utilisateurs aux droits restreints

Par défaut, l’installation d’EasyPHP crée, dans MySQL, un usager root sans mot de passe. Ceci est correct pour un travail sur un serveur de développement local comme EasyPHP mais il serait très dangereux de travailler ainsi sur un site Web en ligne.

Voici donc les précautions que vous devriez prendre pour un serveur MySQL disponible sur internet.

  • Créez un nouvel usager possédant tous les droits sur toutes les BD et donnez-lui un mot de passe.
  • Avant de poursuivre, effectuez les vérifications suivantes :
    • Loguez-vous sous root à la ligne de commande MySQL ou dans phpMyAdmin.
    • Exécutez la commande suivante :
      MySQL

      SELECT * FROM mysql.user \G;

      et assurez-vous que vous voyez bel et bien votre nouvel usager pour le host % et que tous les privilèges sont à Y. Vous devez avoir un second usager portant le même nom et ayant les mêmes privilèges. Cette fois, le host doit être localhost.

  • Pour pouvoir accéder à phpMyAdmin avec votre nouvel usager :
    • Fermez tous les onglets de votre navigateur qui affichent phpMyAdmin et videz le cache du navigateur.
    • Éditez le fichier conf.inc.php situé dans un dossier dont le nom ressemble à C:\Program Files (x86)\EasyPHP-12.0\modules\phpmyadmin351x120817153021.
    • Deux options s'offrent à vous. Pour avoir une fenêtre de login vous permettant de changer d'utilisateur au besoin :
      • Repérez la ligne suivante : $cfg['Servers'][$i]['auth_type']     = 'config';
      • Remplacez 'config' par 'http'.
    • Pour que phpMyAdmin utilise toujours le même usager :
      • Repérez la ligne suivante : $cfg['Servers'][$i]['user'] = 'root';
      • Remplacez 'root' par l'usager souhaité.
      • Repérez la ligne $cfg['Servers'][$i]['password'] = '';
      • Entrez votre mot de passe en clair entre les apostrophes.
  • Ouvrez à nouveau phpMyAdmin et vérifiez sur la page d'accueil que le bon usager apparaît dans la zone « Serveur de base de données ».
  • Vous pouvez maintenant détruire l'usager root. :
    • Utilisez votre nouvel usager pour vous reloguer à la ligne de commande ou sous phpMyAdmin puis détruisez l'usager root.
    • N'oubliez pas de détruire tous les usagers root (il y en a généralement trois).
  • L'administrateur ne doit jamais être utilisé par votre site Web pour accéder à un site. Vous devez donc créer un autre usager qui aura des droits limités.
    • Cet usager ne pourra accéder qu'à la BD que vous venez de créer.
    • Il aura besoin des droits SELECT,UPDATE,DELETE,INSERT,EXECUTE et CREATE.
    • Vous pouvez vérifier les droits de l'usager sur les différentes bases de données à l'aide de la commande suivante :
      MySQL

      SELECT * FROM mysql.db \G;

Renommer les tables WordPress

Si vous devez travailler avec un site WordPress dont les tables commencent toutes par le préfixe wp_, vous pouvez modifier ce préfixe afin d'augmenter la sécurité du site.

Une des astuces que les utilisateurs malveillants cherchent généralement à exploiter consiste à modifier le contenu de la table wp_options afin de rediriger votre site vers un site de leur choix.

  • Choisissez un nouveau préfixe qui sera difficile à deviner. wp_, wordpress_, wp1_ ou tout autre préfixe comme votre nom, vos initiales ou le nom de votre site ne sont pas de bonnes options. Vous leur préférerez une série de lettres qui ne forment pas nécessairement un mot. Le préfixe peut aussi contenir des chiffres. Il est possible d'utiliser un préfixe généré au hasard.
  • Prenez une copie de sécurité de votre base de données.
  • Dans votre fichier wp-config.php, entrez le nouveau préfixe que vous comptez utiliser.

    Ex :

    Fichier wp-config.php

    $table_prefix  = 'm6w_';

  • Renommez les tables de votre BD.

    Ex :

    MySQL

    RENAME TABLE wp_commentmeta TO m6w_commentmeta;

    RENAME TABLE wp_comments TO m6w_comments;

    RENAME TABLE wp_links TO m6w_links;

    RENAME TABLE wp_options TO m6w_options;

    RENAME TABLE wp_postmeta TO m6w_postmeta;

    RENAME TABLE wp_posts TO m6w_posts;

    RENAME TABLE wp_terms TO m6w_terms;

    RENAME TABLE wp_term_relationships TO m6w_term_relationships;

    RENAME TABLE wp_term_taxonomy TO m6w_term_taxonomy;

    RENAME TABLE wp_usermeta TO m6w_usermeta;

    RENAME TABLE wp_users TO m6w_users;

  • Modifiez les enregistrements de la table wp_options afin qu'ils utilisent les nouveaux noms de tables. Vous recherchez plus spécifiquement un enregistrement dont le champ option_name contient la valeur wp_

    Ex :

    MySQL

    UPDATE  m6w_options SET  option_name =  'm6w_user_roles' WHERE  option_name =  'wp_user_roles';

  • Modifiez les enregistrements de la table wp_usermeta. Cette fois, vous rechercherez tous les enregistrements dont le champ meta_key commence par wp_. Le nombre d'enregistrements affectés dépend du thème et des extensions installés sur votre site.

    Ex :

    MySQL

    UPDATE m6w_usermeta SET meta_key = REPLACE(meta_key,'wp_','m6w_') WHERE meta_key LIKE 'wp_%';

  • Testez maintenant votre site. Tout devrait être fonctionnel.

Mise à jour de WordPress

Afin d'empêcher les utilisateurs malveillants de profiter de failles potentielles, il est important de mettre à jour WordPress sur une base régulière.

Vous saurez qu'une mise à jour est disponible en regardant dans le Tableau de bord. Vous serez avertis des mises à jour à effectuer sur WordPress, sur vos thèmes et sur vos extensions.

WordPress-AvertissementMiseAJour

Il est possible de faire une mise à jour automatique ou manuelle. Nous préférerons la mise à jour manuelle.

Étapes pour mettre à jour WordPress manuellement :

  • Prenez une copie de sécurité de :
    • votre BD
    • tout votre dossier WordPress
  • Désactivez les extensions que votre site utilise (pas besoin de les désinstaller). Ceci évitera les problèmes si une de vos extensions ne fonctionnait pas avec la nouvelle version de WordPress.
  • Sur votre poste de travail local, téléchargez la dernière version de WordPress et décompressez le fichier .zip.
  • Sur votre serveur, effacez les dossiers wp-include et wp-admin.
  • Sur votre poste de travail local, dans le dossier que vous venez de décompresser, sélectionnez tous les fichiers et dossiers SAUF le dossier wp-content. Copiez-les sur votre serveur.
  • Vérifiez si des fichiers doivent être retirés de la racine du site Web ou du dossier wp-content. Attention : certains fichiers présents sur le serveur peuvent avoir été ajoutés à la suite de votre programmation ou de vos configurations. Vous devez effacer seulement les fichiers de l'API WordPress qui ne font plus partie de la nouvelle version.
  • Vérifiez maintenant si des fichiers doivent être ajoutés à la racine du site Web ou dans le dossier wp-content. Portez une attention particulière au dossier wp-content/languages. Si des modifications ont été apportées dans les fichiers de ce dossier, votre tableau de bord WordPress affichera le message « Certaines de vos traductions ne sont pas à jour ».
  • Comparez le fichier wp-config-sample.php au fichier wp-config.php. Si de nouveaux réglages font désormais partie de ce fichier, copiez les lignes concernées dans votre fichier wp-config.php.
  • Ouvrez le panneau de configuration de votre site (votresite/wp-admin). WordPress détectera qu'une mise à jour a été effectuée. Si des modifications doivent être apportées à la base de données, elle seront faites automatiquement.
  • Dans votre panneau de configuration, dans l'onglet Mises à jour, cliquez sur « Vérifier à nouveau ». Vous ne devriez plus avoir le message demandant de mettre à jour WordPress. Il se peut cependant qu'il vous reste des mises à jour à effectuer sur votre thème ou sur vos extensions.
  • Testez votre site Web à fond après une mise à jour. En particulier, certaines extensions pourraient ne plus fonctionner correctement.
  • Si une extension n'est pas compatible avec la mise à jour : vérifiez si l'extension doit être mise à jour. Si les développeurs de l'extension n'ont pas encore publié de mise à jour, vous devez soit désactiver l'extension, soit revenir à l'ancienne version de WordPress (à l'aide de votre copie de sécurité pour les fichiers et pour la BD).

Mise à jour d'un thème ou d'une extension

Lorsque des mises à jour sont disponibles pour un thème ou une extension, deux scénarios peuvent se présenter :

  • Vous avez apporté des modifications au thème ou à l'extension. Vous devrez tenir compte des fichiers que vous aurez modifié lors de la mise à jour.
  • Vous n'avez pas apporté de modifications. La mise à jour sera plus simple.

Dans tous les cas, la mise à jour manuelle est préférable puisqu'elle vous offre plus de contrôle.

Notez que WordPress vous informera des mises à jour de tous les thèmes et extensions installés et non seulement des éléments actifs.

Pour mettre à jour un thème ou une extension manuellement :

  • Prenez une copie de sécurité de :
    • votre base de données
    • tous les fichiers contenus dans le dossier de votre site Web
  • Téléchargez sur votre poste local la nouvelle version du thème ou de l'extension et décompressez le fichier.
    • Vérifiez la présence de fichiers texte (ex : .txt, .md) qui pourraient donner de l'information sur la version du thème ou de l'extension. Ces fichiers, dont le texte est visible directement dans un navigateur, peuvent être utilisés par des usagers malveillants afin de détecter les failles de sécurité relatives à une version donnée du thème ou de l'extension. Si vous trouvez un tel fichier, effacez-le afin de vous assurez de ne pas le copier sur le serveur. Exemples de fichiers potentiellement compromettants : readme.txt, readme.md, license.txt, documentation.txt, contributing.md.
  • Dans le cas d'une extension, désactivez l'extension à l'aide du panneau de configuration.
  • Si vous n'avez pas apporté de modifications, écrasez les anciens fichiers du thème ou de l'extension par les nouveaux fichiers.
  • Si vous aviez apporté des modifications au thème ou à l'extension, deux choix s'offrent à vous :
    • Écraser seulement les fichiers que vous n'avez pas modifiés.
      • Au besoin, vous pouvez utiliser un outil comme WinMerge pour comparer les fichiers avant la mise à jour et après la mise à jour. Le logiciel listera tous les fichiers modifiés et mettra en surbrillance toutes les lignes qui sont différentes dans l'une ou l'autre des versions.
      • Effectuez une comparaison manuelle entre l'ancienne et la nouvelle version des fichiers que vous avez modifiés.
      • Recopiez les lignes nécessaires pour que les fichiers que vous aviez modifiés comprennent les nouveautés présentées par le thème ou l'extension.

      Notez que lorsqu'un thème doit être modifié, il est recommandé de créer un thème enfant basé sur ce thème. De cette façon, les fichiers originaux du thème ne seront pas modifiés et les mises à jour seront facilitées.

    • La seconde option consiste à noter les modifications que vous aviez apportées, écraser tous les fichiers puis remettre en place manuellement les lignes que vous aviez modifiées.
  • Si vous aviez modifié les fichiers de localisation du thème ou de l'extension (fichiers .po et .mo généralement présents dans le dossier languages ou lang du thème ou de l'extension), remettez vos fichiers modifiés en place.
  • Si vous travaillez avec un thème enfant et que vous avez copié des fichiers modèles (ex : header.php, footer.php, single.php) dans votre thème enfant afin de les adapter, comparez vos fichiers avec les nouveaux fichiers mis à jour. Au besoin, apportez les correctifs à vos fichiers adaptés. On a déjà vu un thème changer la balise du menu pour petits écrans. Alors qu'elle utilisait <h3 class="menu-toggle">Menu</h3>, elle a été modifiée pour <button class="menu-toggle">Menu</button>. Le Javascript qui gérait le clic sur cette balise a également été modifié, si bien que sur les sites où le fichier header.php avait été copié puis adapté, il n'était plus possible de cliquer sur le bouton menu à moins de modifier le <h3> pour <button>.
  • Si vous aviez désactivé une extension, vous pouvez maintenant la réactiver.
  • Dans votre panneau de configuration, dans l'onglet Mises à jour, cliquez sur « Vérifier à nouveau ». Vous ne devriez plus avoir le message demandant de mettre à jour votre thème ou votre extension.
  • Testez votre extension pour vous assurer que tout fonctionne correctement.

Pour plus d'information

« 7 conseils pour sécuriser votre WordPress et éviter que ce soit un véritable gruyère ». Geek press. http://www.geekpress.fr/wordpress/guide/7-conseils-securite-wordpress-802/

« Sécuriser son blog WordPress et lutter contre le spam – Manuel de Combat ». Lashon. http://lashon.fr/securite-informatique/wordpress-antispam-securite-site-web/

« FAQ My site was hackedFAQ My site was hacked ». Codex WordPress. http://codex.wordpress.org/FAQ_My_site_was_hacked

« Modifier le préfixe de votre base de données WordPress après installation ». WordPress Channel. http://wpchannel.com/modifier-prefixe-base-donnees-wordpress-apres-installation/

« 6 Simple Steps to Change Your Table Prefix in WordPress ». Tdot-Blog. http://tdot-blog.com/wordpress/6-simple-steps-to-change-your-table-prefix-in-wordpress

« Mettre a Jour WordPress ». Codex WordPress. http://codex.wordpress.org/fr:Mettre_a_Jour_WordPress

« How to Upgrade a WordPress Theme — Even if It’s Customized ». WPMU - The WordPress Experts. http://wpmu.org/how-to-upgrade-a-wordpress-theme-even-if-its-customized/

« How to secure your WordPress? ». SmarterASP.net. http://www.smarterasp.net/support/kb/a1495/how-to-secure-your-wordpress.aspx?KBSearchID=213202

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories

2 commentaires

  1. boubacar

    bonjour
    je suis débutant dans wordpress je viens de faire mon premier site,et j’avoue j’ai pas connaissance de tout ces informations clés
    merci pour ce tuto clair et complet

    • Christiane Lagacé

      Merci pour ce commentaire. Si mes articles vous intéressent, je vous suggère de vous abonner à mon blogue (à partir de la page d’accueil). Bonne chance avec votre site!

      Christiane