Le WordPress d'aujourd'hui, décodé pour les développeurs

Sécurité

wp_generate_password : pourquoi sa longueur par défaut peut affaiblir un compte créé automatiquement

Un développeur d'extension appelle cette fonction native avec une longueur insuffisante lors de la création automatique de comptes. Fonctionnement interne, cas d'usage et pièges à éviter.

Par Clément Hadrot • 11 juillet 2022 • 4 min de lecture • Aucun commentaire
wp_generate_password : pourquoi sa longueur par défaut peut affaiblir un compte créé automatiquement

D’après la documentation officielle sur developer.wordpress.org, la fonction wp_generate_password() génère par défaut un mot de passe de douze caractères lorsqu’aucun argument n’est précisé. Ce chiffre convient à un compte créé manuellement par un humain qui va ensuite le retenir ou le stocker dans un gestionnaire de mots de passe. Il devient plus discutable lorsqu’un développeur d’extension l’utilise, sans y penser, pour générer automatiquement des comptes de service ou des comptes techniques à grande échelle.

Fonctionnement interne de la fonction

La signature complète de la fonction est la suivante :

wp_generate_password(
    int $length = 12,
    bool $include_standard_special_chars = true,
    bool $extra_special_chars = false
): string

Le premier paramètre fixe la longueur du mot de passe généré. Le deuxième détermine si des caractères spéciaux standards (comme !, @, #) sont inclus dans le jeu de caractères possibles. Le troisième, plus rarement utilisé, ajoute des caractères spéciaux supplémentaires (comme ~, {, ]), utile pour certains contextes où l’on souhaite maximiser encore l’entropie du résultat.

Ce que l’entropie représente concrètement

L'essentiel à retenir : Le paramètre de longueur par défaut ne convient pas à tous les usages ; Les caractères spéciaux augmentent réellement l'entropie du résultat ; Un compte créé par automatisation mérite un mot de passe plus long qu'un compte humain

Avec les valeurs par défaut, la fonction pioche parmi un ensemble d’environ soixante-quatorze caractères possibles (lettres majuscules, minuscules, chiffres, caractères spéciaux standards). Pour un mot de passe de douze caractères, cela représente environ soixante-quatorze puissance douze combinaisons possibles, un nombre suffisamment grand pour résister à une attaque par force brute directe dans des conditions normales. Le problème apparaît quand cette fonction est appelée avec une longueur réduite, ou quand le compte généré n’est jamais soumis à un verrou de tentatives de connexion, ce qui est fréquent pour les comptes de service utilisés par des automatisations.

Cas d’usage typique dans une extension

Une extension qui crée automatiquement un compte technique, par exemple pour permettre à un service externe de s’authentifier via l’API REST, appelle souvent cette fonction ainsi, sans réflexion particulière :

$mot_de_passe = wp_generate_password();
wp_create_user( 'service_integration', $mot_de_passe, 'service@exemple.fr' );

Ce mot de passe de douze caractères, généré une seule fois puis stocké tel quel dans une table de configuration de l’extension, protège un compte qui n’est jamais consulté par un humain et qui peut rester actif pendant des années sans rotation. Dans ce contexte précis, il mérite d’être nettement plus long que la valeur par défaut :

$mot_de_passe = wp_generate_password( 32, true, true );

Trente-deux caractères, avec l’ensemble des caractères spéciaux disponibles, réduit drastiquement la probabilité qu’une attaque par force brute puisse aboutir avant qu’une rotation ne soit effectuée, même en l’absence de verrouillage après tentatives échouées.

Les pièges les plus fréquents

  • Utiliser la valeur par défaut sans se demander si le compte généré est humain ou technique.
  • Stocker le mot de passe généré en clair dans une option WordPress plutôt que dans une variable d’environnement.
  • Ne jamais faire tourner ce mot de passe, sous prétexte qu’il a été généré aléatoirement une fois pour toutes.
  • Désactiver le deuxième paramètre par erreur, en pensant simplifier le mot de passe généré pour un affichage, ce qui réduit l’entropie sans bénéfice réel.

Ce que ce n’est pas : la politique de mot de passe humaine

Cette fonction ne concerne en rien la politique de mot de passe imposée aux utilisateurs humains lors de leur inscription ou de leur changement de mot de passe, un sujet distinct traité par d’autres mécanismes (filtres sur la force du mot de passe saisi, vérification contre des bases de fuites connues). wp_generate_password() sert uniquement à la génération automatique, côté serveur, d’un mot de passe que personne ne choisit lui-même.

Une fonction utilitaire native n’a pas de longueur « idéale » universelle : elle a une longueur par défaut raisonnable pour un usage courant, à ajuster explicitement dès que le contexte d’usage s’en écarte.

En résumé

La valeur par défaut de wp_generate_password() convient à la grande majorité des usages humains classiques. Pour tout compte généré automatiquement, en particulier destiné à des intégrations techniques appelées à durer, augmenter explicitement la longueur et activer l’ensemble des caractères spéciaux disponibles reste un réflexe simple, qui coûte un seul paramètre de plus dans l’appel de fonction.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi