Contrairement à ce que son orthographe laisse penser, un nonce WordPress n’est pas garanti à usage unique strict ni parfaitement imprévisible : c’est un jeton lié à une action précise, à l’utilisateur courant et à une fenêtre de temps limitée, destiné à confirmer qu’une requête provient bien de l’interface légitime plutôt que d’un site tiers qui tenterait de la reproduire.
Fonctionnement dans WordPress
On génère un nonce avec wp_create_nonce('mon_action') ou on l’insère directement dans un formulaire avec wp_nonce_field('mon_action'). À la réception, on le vérifie avec wp_verify_nonce($nonce, 'mon_action'), qui renvoie une valeur non nulle si le jeton est valide et correspond bien à l’action attendue.
Exemple
$url = wp_nonce_url(
admin_url('admin-post.php?action=wpm_export'),
'wpm_export_action'
);
// côté traitement
if (!wp_verify_nonce($_GET['_wpnonce'] ?? '', 'wpm_export_action')) {
wp_die(__('Lien expiré ou invalide.', 'wpm'));
}
Pièges fréquents
Un nonce n’est pas un mécanisme d’autorisation : il prouve qu’une requête vient du bon formulaire, mais ne vérifie en rien que l’utilisateur a le droit d’effectuer l’action demandée. Il faut donc toujours l’associer à un contrôle de capacité via current_user_can(), sans quoi un utilisateur légitime mais non autorisé pourrait tout de même déclencher l’action en récupérant un nonce valide généré pour lui. Sa durée de vie par défaut, généralement de 24 à 48 heures, explique aussi pourquoi un formulaire resté ouvert trop longtemps dans un onglet peut afficher un message d’erreur au moment de la validation.