Aujourd'hui, voyons comment protéger la page d'identification permettant d'accéder au tableau de bord de WordPress.
Je vous invite à lire les deux premières parties de cette série de tutoriel si vous les avez raté : partie 1 (l'utilisateur par défaut "admin"), partie 2 (l'accès au fichier wp-config.php).
Pourquoi protéger
Cette page permet à tous les utilisateurs WordPress de se connecter au tableau de bord. Suivant son rôle, le champ d'action de l'utilisateur est plus ou moins limité.
Parmi ces utilisateurs il y a toujours un utilisateur administrateur, disposant de tous les droits sur le blog. Cet utilisateur c'est vous.
Parce que vous n'êtes pas à l'abris des intrusions de personnes indésirables, voici quelques pistes pour sécuriser cet accès.
Limit Login Attempts
L'extension Limit Login Attempts inhibe les tentatives de connexions par technique de force-brute.
Il est possible de bloquer le formulaire d'identification :
"1 attempt remaining" : dernière chance pour entre le bon couple de login/password avant de se faire bannir temporairement.
De nombreux paramètres sont présents dans les options de l'extension :
Il suffit de préciser "after 1 lockout" pour recevoir toutes les notifications par email, pratique (et stressant) si vous êtes en déplacement.
L'extension fonctionne parfaitement sur la version 2.8.4 (bien que 2.7.1 soit indiqué).
Note dév : l'extension utilise la table wp_options avec des attributs commençant par limit_login_*
Login LockDown
Dans les même esprit, Login LockDown protège votre tableau de bord en l'indiquant dès le formulaire d'authentification :
On retrouve certains paramètres dans les options avec la possibilité de masquer les messages d'erreur ("Mask Login Errors") :
Vous pouvez également masquer les erreurs retournées en cas de mauvais login/pass dans le fichier functions.php de votre thème en insérant le code suivant :
add_filter('login_errors',create_function('$a',"return null;"));
Pensez à activer "Lockout Invalid Usernames" pour éviter que WordPress précise qu'un utilisateur n'existe pas. En effet, cette méthode peut permettre de découvrir quel nom d'utilisateur existe. En activant cette fonctionnalité vous rendez impossible là encore le brut-force.
Note dév : utilise la table wp-lockdowns
Chiffrer l'authentification
Pour chiffrer tout ce qui transite entre vous et votre serveur, l'idéal est d'utiliser un chiffrement SSL. Il permet d'éviter l'interception de données si vous êtes en entreprise, dans un cybercafé, sur un hotspot WiFi, etc. mais consomme beaucoup de ressources système et n'est que rarement proposé par l'hébergeur (payant).
L'extension Semisecure Login Reimagined utilise une clé publique RSA pour chiffrer le login+mot de passe et se sert de la clé publique pour le déchiffrer lors de sa réception. Tout est bien sûr transparent pour vous, seule une petite notification vous informe de la mise en place du plugin :
Il faudra que la version PHP de votre serveur ait été compilée avec SSL pour pouvoir l'utiliser.
Dans le cas contraire vous pouvez utiliser le plugin Semisecure Login qui n'utilise pas RSA mais le chiffrement MD5.
Vous pouvez chiffrer l'identifiant, le mot de passe ou les deux :
Vu la transparence et la fiabilité du chiffrement (RSA) il serait bien dommage de s'en priver ?
Cela n'équivaut pas à via SSL une authentification HTTPS mais l'algorithme RSA est reconnu comme fiable depuis 25 ans.
Attention toutefois si vous envoyez des fichiers via FTP sur un réseau dont vous n'êtes pas à l'abris d'une écoute, je vous rappel que vos identifiants (mot de passe inclus) transitent en clair. Il est conseillé de créer un compte FTP de façon temporaire pour ce genre de transfert non sûr, ou bien d'encapsuler FTP dans un tunnel SSH (via socks éventuellement).
Un mot de passe jetable
One-Time Password est une extension fonctionnant sur le principe d'un mot de passe unique à chaque connexion, en conformité avec la RFC2289 du même nom.
Le principe est relativement simple et efficace : le plugin génère une liste de 50 mots de passes qu'il vous faudra imprimer ou garder en lieu sûr.
Comme si chaque mot de passe était une allumette, une fois usagée il est impossible de s'en servir à nouveau.
A chaque connexion sur votre blog il vous sera demandé le mot de passe correspondant à l'identifiant affiché (Seq). Une fois authentifié ce mot de passe ne sera plus utilisable (détruit) détruit et l'identifiant décrémenté.
La première étape consiste à entrer un passphrase qui servira à la génération des X (au choix) mots de passes aléatoires :
Je vous recommande de choisir SHA1 comme algorithme de chiffrement.
Cliquer sur Generate puis imprimer la liste de mot de passe (ou stockez-là dans un lieu sûr, chiffrée de préférence) :
On retrouve 3 colonnes avec :
- Seq : identifiant
- Hex : mot de passe en héxadécimal
- Words : mot de passe, plus facile à mémoriser car composé de mots anglais
Il vous suffit ensuite d'entrer votre login puis le mot de passe (en hexa ou en mots) depuis votre liste précédemment imprimée en fonction de l'identifiant affiché :
Par mesure de sécurité, vous pouvez toujours vous connecter via votre mot de passe d'origine.
Réservez donc cette solution pour une connexion non sûre dans un cybercafé, chez un ami qui a des virus, sur un hotspot non chiffré ou même sur un PC comportant un keylogger !
Je rappelle que le but de l'extension n'est pas de chiffrer mais simplement de fournir des mots de passes à usage unique (sans taxe carbone rassurez-vous 😉 ).
PHP >= 5.0.0 ainsi que WordPress >= 2.8 sont des pré-requis.
Personnaliser l'adresse de connexion
Il vous suffit d'utiliser le plugin Stealth Login pour personnaliser l'adresse d'accès du tableau de bord, de connexion et de déconnexion.
Au lieu de vous rendre sur http://site.fr/wp-admin vous irez sur http://site.fr/admin par exemple :
Le plugin ajoute simplement quelques lignes de rewrite dans votre fichier .htaccess. Vous pouvez donc tout à fait désactiver voir supprimer le plugin une fois vos adresses configurées.
Attention : cela ne désactive pas l'accès via via l'URL /wp-admin mais crée simplement d'autres URL personnalisées
Conclusion
Chacun de ces plugins permet d'ajouter un pallier de sécurité quant à la sécurité de votre blog WordPress. Ils ne sont pas infaillibles mais c'est toujours mieux que de ne rien avoir.
Ne les installez/activez pas tous à la fois, certains jouant le même rôle vous risqueriez d'avoir pas mal de conflits puisqu'ils ne sont pas fait pour fonctionner en même temps.
Attention tout de même à garder ces plugin à jour, car en cas de faille ils pourraient bien jouer le rôle inverse que de vous protéger.
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
7 commentaires
J'ai surement loupé une étape !
Je voudrais savoir comment personnaliser le formulaire de connexion comme décrit dans les exemples ci-dessus (libellé, OpenID, ...).
@Insolite-du-Geek : pour la personnalisation j'ai simplement remplacé l'image wp-admin/images/logo-login.gif par ma création.
Concernant OpenID, je n'aborde pas le sujet dans le billet car je ne me sers pas de cette fonctionnalité. Mais il s'agit tout simplement du plugin OpenID (que j'utilise principalement pour que les commentateurs puissent commenter via OpenID)
Avec les dernières attaques massives sur les blogs WP, cet article tombe à pic !
Le premier plugin me branche bien, mais j'ai déjà WP Secure et bad behavior donc je ne sais pas si il reste utile..
Au passage, superbe l'effet de style sur le titre de tes articles.
Bonne fin de journée,
Gael
Et un htaccess/htpassword pour protéger le répertoire wp-admin ? Ca vaut quoi ?
@symptome : merci. Il ne faut pas non plus ajouter trop de plugins et tomber dans la paranoïa de l'exotisme 😀
@thibault : c'est un pallier supplémentaire de sécurité. Après il faut trouver un équilibre entre sécurité et pratique. Il n'est pas non plus utile de passer 3 minutes à s'identifier sur un "simple blog" 😉
@Mr Xhark : En mémorisant le MDP dans firefox ou son explorateur web, l'authentification htaccess chez soi n'est rien de plus qu'un clique sur un "OK". 😉
@Thibault : dans ce cas considère cela comme un pallier de sécurité supplémentaire