Formation PUB020 : WordPress, 2020 Les nonces dans WordPress

Utilisation d'un nonce dans un formulaire


Le processus de sécurité mis en place par les nonces dans un formulaire WordPress se déroule en deux temps : la génération du nonce lorsque le formulaire est affiché puis la vérification de la validité du nonce lorsque le formulaire est traité.

▼Publicité

Génération du nonce

Lorsqu'une balise <form> est générée, un nonce est également généré à l'aide de la fonction wp_nonce_field(). Cette fonction génère le nonce puis l'ajoute au formulaire dans un champ caché.

La fonction demande quelques paramètres, tous optionnels.

  • Action : il est fortement recommandé de fournir ce paramètre. Il s'agit d'une chaîne qui représente l'action à effectuer. Cette chaîne est utilisée dans l'algorithme de création du nonce, ce qui le rend plus difficile à deviner. Elle sera également utilisée lors de la vérification de la validité du nonce. Dans le cas d'un formulaire de modification, on y ajoutera l'identifiant de l'élément sur lequel on désire travailler (ex : editer_item_3). Par défaut, ce paramètre prend la valeur -1.
  • Nom : il s'agit de l'attribut name à donner au champ caché ainsi créé. Par défaut, ce sera _wpnonce.
  • Referer : le troisième paramètre indique si un second champ caché doit être créé pour stocker l'URL de la page du formulaire. Cette information pourrait être utilisée comme validation supplémentaire lors du traitement du formulaire. Ce paramètre est à true par défaut.
  • Echo : lorsque wp_nonce_field() est utilisée dans un shortcode, le quatrième paramètre est également important : en le mettant à false, il permet d'éviter de faire un echo du champ caché ainsi créé. Il sera seulement utilisé comme valeur de retour. Ce paramètre est à true par défaut.

Prenons le cas d'un formulaire affiché dans le tableau de bord. Son affichage sera codé dans la fonction de rappel associée à l'option de menu qui affiche le formulaire.

Rappel : il n'y a pas lieu d'utiliser les nonces lorsque le formulaire est disponible pour le grand public.

Le nonce sera généré ainsi :

WordPress (PHP)

$nonce = wp_nonce_field( 'une_action_donnee', 'nomduchampcache', true );
 
?>
<form method='post' action='...'>
    <?php echo $nonce; ?>    
    ...
</form>
<?php  

Lorsque la fonction de rappel qui génère ce formulaire sera exécutée, le code suivant sera généré :

HTML

<form method='post' action='...'>
    <input type="hidden" id="nomduchampcache" name="nomduchampcache" value="b902a6edc8" />
    <input type="hidden" name="_wp_http_referer" value="..." />
    ...
</form>

Vérification de la validité du nonce

Lors du traitement du formulaire, une vérification de la validité du nonce est effectuée à l'aide de wp_verify_nonce().

  • Le premier paramètre de wp_verify_nonce() est la valeur du nonce à vérifier. Puisque le nonce a été stocké dans un champ caché, sa valeur peut être récupérée à l'aide de $_POST, au même titre que les autres informations du formulaire.
  • Le second paramètre correspond à l'action, tel que spécifiée lors de la création du nonce.

Ex :

WordPress (PHP)

// traitement du formulaire
if ( isset( $_POST['soumettre'] ) ) {   // si la page a reçu des données du formulaire  
    if ( wp_verify_nonce( $_POST['nomduchampcache'], 'une_action_donnee' ) ) {
        ...   // effectuer l'action prévue par le formulaire
    } else {
        ...    //traitement à effectuer si le nonce n'est pas valide
    }
}

Dernière révision le 6 novembre 2020
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre