Utilisation d’un nonce dans un formulaire WordPress

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 le stocke 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 représentant 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. 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.

Ex : 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 affichant le formulaire (rappel : il n'y a pas lieu d'utiliser les nonces lorsque le formulaire est disponible pour le grand public) :

WordPress (PHP)

$nonce = wp_nonce_field( 'une_action_donnee', 'nomduchampcache', true, true );

 

?>

<form method='post' action='...'>

    <?php echo $nonce; ?>    

    ...

</form>

<?php  

Lorsque la fonction de rappel générant 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' ) ) {

        ...   // traitement à effectuer si le nonce n'est pas valide

    } else {

        ...    // effectuer l'action prévue par le formulaire

    }

}

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories