Sécuriser

Il est clair que tous les sites reçoivent des tentatives d’intrusion. Bien que la sécurité absolue n’existe pas, on peut placer quelques embûches face aux assaillants. En effet, la plupart de ceux-ci n’insisteront pas si l’attaque est trop difficile, enfin à moins qu’il s’agisse de contenus vraiment sensiblse.

Commençons par quelques règles classiques.

  • Veillez à réaliser les mises à jour, des failles de sécurité sont souvent découvertes et comblées.
  • Utilisez des noms de compte pas devinables et des mots de passe robustes.
  • Si les commentaires sont autorisés sur le site, leur modération est indispensable, de préférence à priori.
  • Assurez-vous que les fichiers et répertoires du site ont l’accès en écriture uniquement pour le propriétaire.

Passons maintenant à ce qui concerne plus particulièrement WordPress. Si vous êtes en multi-sites, il faudra vous connecter comme super-administrateur.

Attention au fichier « wp-config.php »

Ce fichier, situé à la racine de l’installation de WordPress » est la cible de toutes les convoitises car il contient des informations sensibles notamment les codes d’accès à la base de données.

Il est important de vérifier qu’il n’existe pas de versions lisibles de ce fichier comme « wp-config.bak » ou « wp-config.php.sav » qui auraient pu être créées lors d’une édition de texte qui contiendrait les mêmes informations.

Sur un des mes sites, il y a eu, en moins d’une minutes, 112 recherches de fichiers de noms approchant. Bien sûr sans succès.

Une autre solutions consisterait à mettre les informations dans un autre fichier, placé à un endroit sûr. Le « wp-config.php » ne contiendrait alors qu’un « include ». Toutefois cela peut poser des problèmes lors d’une mise à jour de WordPress.

Protéger les comptes administrateurs

Le compte qui a été crée au moment de l’installation est celui du super-administrateur, il porte le numéro 1.

Un internaute qui suffixe l’adresse du site par «?author=1» verra s’afficher probablement le nom du compte de l’administrateur qui a installé WordPress.

Comme trois précautions valent mieux qu’aucune, voici ce qui est possible pour limiter ce problème.

Créer de nouveaux comptes d’utilisateur, supprimer les anciens

Ils prendront des numéros successifs. Veillez à donner une adresse électronique différente chaque fois, pas nécessairement valide mais bien formée et veillez aussi à ce que le système ne leur envoie pas de message de bienvenue.

Le dernier, ou plutôt les derniers seront ceux de super-administrateur avec des noms peu révélateurs. Se reconnecter avec un de ces comptes.

Supprimer tous les comptes d’utilisateur précédents.

Sur un multi-site, pour supprimer des comptes, il faut s’assurer que ceux-ci aient déjà été supprimés dans les sous-sites.

Avant de supprimer un compte de super-administrateur, il faut que son adresse de messagerie ne soit pas celle enregistrée dans «Réglages du réseau».

Si dans «Utilisateurs» du réseau, on n’arrive pas à supprimer un compte, il faut le cocher et le supprimer par les actions groupées.

Les administrateurs administrent, les rédacteurs rédigent

Comme il est souhaitable de signer ses contributions au site, il est probable que le thème choisi affiche pour chaque article ou page le nom de l’auteur. Donc il faudrait que les articles et pages soient rédigés par des personnes qui de sont pas des administrateurs. WordPress propose  pour cela les rôles de contributeur, auteur et éditeur.

On peut aussi, lors de l’écriture/modification d’un article ou d’une page, spécifier dans la case prévue pour cela (en bas de la page) le nom de l’auteur.

Changer le nom à afficher publiquement

Dans la page de modification d’un compte d’utilisateur (profil), s’il n’est pas possible de changer l’identifiant (nom de login), on peut modifier le nom, le prénom et le pseudonyme, ensuite choisir dans «Nom à afficher publiquement», celui qui sera visible.

Ne pas différencier un mauvais nom de compte d’un mauvais mot de passe.

Il n’est pas conseillé de modifier les fichiers d’un thème que l’on a téléchargé car celui-ci peut recevoir des mises à jour. Dans ce cas il faut créer un thème enfant que l’on pourra modifier sans ce risque. Une autre possibilité est de créer une extension.

En cas d’erreur de connexion, un message indique à l’utilisateur soit que le nom d’utilisateur n’est pas valide, soit que le mot de passe ne correspond pas. Cela indique à un attaquant où se trouve son erreur.

Pour obtenir un message n’indiquant pas ces détails, il faut ajouter au fichier «functions.php» du thème(-enfant) :

function login_erreur_personnel($a) {
  return NULL;
}
add_filter('login_errors', 'login_erreur_personnel');

Cependant…

Les versions récentes de WordPress disposent des technologies XML-RPC et REST. Celles-ci permettent à une application d’obtenir des informations sur le site, tels que les noms de login des utilisateurs. Si l’on veut être bien protégé aussi de ce côté, il faut aussi les bloquer.

Utiliser des extensions de sécurité.

En prenant les précautions d’usage concernant la qualité des extensions, on en trouvera qui ont trait à la sécurité dans les domaines :

  • de la protection du site contre les accès malveillants,
  • de la détection de telles tentatives,
  • de la modification ou déplacement des fichiers sensibles (login, config..),
  • des statistiques d’accès.

Un exemple

Pour être clair, même un site anodin est cible d’attaques.

Je prends pour cet exemple, un site WordPress (assez peu connu car spécialisé et d’intérêt local) dont je m’occupe et cela sur le mois de mars 2018. Je ne prends pas en compte les accès par les robots bien connus (Google, Bing, etc.).

Ce mois là il y a eu 1860 visiteurs qui ont vus 5285 pages. Sur ces 1860 visiteurs, seuls 746 venaient de France. Bien sût il y a des francophones à l’étranger mais tout de même on a plus de visites de l’étranger que de France !

En ce qui concerne les 5285 pages, il y a eu 918 accès à « wp-login », mais seuls une trentaine étaient légitimes. Il y a eu aussi 51 accès anormaux par XML-RPC et 15 par REST.

Depuis, on a déplacé la page de login et bloquer les accès par  XML-RPC et REST  (il y a des extensions pour cela). On est un peu plus tranquille.