Dernièrement, des milliers de sites internet tournant sous Wordpress ont été la proie de bots qui tentaient de se connecter en tant qu’utilisateur admin via une attaque par force brute.
Ayant quelques sites clients tournant sous Wordpress, je me suis évidemment intéressé à la question et j’ai illico presto installé des plugins pour renforcer la sécurité des systèmes. Toutes ces solutions étaient plus ou moins compliquées, alors que dans mon esprit, la solution est plutôt simple (il est fort possible que mon raisonnement soit faux évidemment, je ne suis pas un expert en sécurité…).
Par essence, un bot qui tente de forcer le passage va lancer un nombre important de requêtes jusqu’à réussir son intrusion dans le système. Le nombre de requêtes par seconde peut être impressionnant, on parle là de plusieurs centaines ou milliers de requêtes par seconde! Une solution simple et efficace, du moins dans mon esprit, est de légèrement ralentir l’étape d’identification. Je pense qu’une seconde d’attente ne dérangera pas l’utilisateur et qu’il ne se rendra même pas compte de ce délai. Pour le bot, par contre, cela peut devenir rapidement gênant si chaque requête effectuée prend au minimum une seconde. Multiplié par cent ou mille (voire plus), cela devient vite inintéressant pour lui.
J’ai donc écrit un petit plugin qui permet d’ajouter un délai d’une seconde à toute tentative de login. Je vous propose ici le code du plugin, en espérant qu’il puisse être utile à certains. Et qui sait, peut-être que par la suite je le complèterai pour lui ajouter des options supplémentaires (je pense par exemple à ajouter une option pour la durée du délai, ça serait bien ça non?). Voici donc, sans plus attendre, le code du plugin, que j’ai nommé de manière très originale: Wordpress Login Delay:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Quelques explications pour ceux qui ne sont pas des habitués de l’API Wordpress:
- Les commentaires en début de fichier Ceux-ci sont nécessaires à Wordpress et servent à donner des informations supplémentaires concernant votre plugin.
add_filter
add_filter
permet d’attacher une fonction à un filtre Wordpress (“hook a function to a specific filter action”, traduction personnelle).add_filter
peut être appelé avec 4 paramètres:- $tag: le nom du filtre aue l’on veut intercepter
- $function_to_add: nom de la fonction qui va être appelée par Wordpress
- $priority (optionnel): permet de spécifier la priorité et l’ordre d’appel des fonctions attachées au même filtre. Un nombre inférieur indique une priorité supérieure. Par exemple si
function1
possède la priorité1
etfunction2
la priorité2
,function1
sera appelé avantfunction2
. $accepted_args: Le nombre de paramètres que la fonction va recevoir
Le filtre
wp_authenticate_user
est appelé lors de la phase d’identification, avant même que ne soit effectuée la vérification du nom d’utilisateur et du mot de passe, c’est donc l’endroit idéal pour ajouter notre petit délai.Pour plus de détails sur
add_filter
, c’est par ici: add_filter.- Enfin, une petite explication rapide du code:
- J’ajoute la fonction
wld_auth_login
au filtrewp_authenticate_user
avec une priorité de1
(le nombre minimum, c’est-à-dire la priorité la plus élevée) et cette fonction reçoit deux paramètres. - La fonction
wld_auth_login
exécute une pause d’une seconde:sleep(1)
. - C’est tout :) Comme vous pouvez le constater, le plugin est tout petit et le code extrêmement facile à comprendre. N’hésitez pas à l’installer sur vos sites Wordpress :)
Edit 19 Août 2013: Le plugin est maintenant disponible sur le site officiel de Wordpress: WP Login Delay/ 44 téléchargements en 2 jours, c’est bien, ça fait plaisir ^__^
Edit 23 Juin 2014: J’ai également ajouté le plugin sur Github.