web-dev-qa-db-fra.com

Comment fonctionne la vérification nonce?

Je peux voir que wp_nonce_field génère une valeur dans le champ caché.

<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />

Mais wp_verify_nonce n'utilise pas cette valeur autant que je sache, mais je me trompe peut-être.

On dirait qu'il utilise un jeton de session pour la vérification.

$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
 if ( hash_equals( $expected, $nonce ) ) 
  { return 1;  }

Alors à quoi ça sert d'avoir un attribut value dans le champ caché?

12
ed-ta

TL; DR

En résumé, wp_verify_nonce() utilise cette valeur car elle attend cette valeur en tant que premier argument.

wp_verify_nonce() arguments

wp_verify_nonce() reçoit 2 arguments:

  1. $nonce
  2. $action

La valeur dans le champ masqué ('cabfd9e42d' dans votre exemple) représente le $nonce.

Le 1er argument est le nonce, et provient de la requête

En fait, wp_verify_nonce() doit être utilisé comme suit:

// here I assume that the form is submitted using 'post' as method

$verify = wp_verify_nonce($_POST['message-send']);

Ainsi, le premier argument passé à wp_verify_nonce() est exactement la valeur présente dans le champ masqué.

2ème argument: la méthode wp_create_nonce()

En ce qui concerne le second argument, cela dépend de la manière dont vous construisez la valeur nonce.

Par exemple. si vous avez fait:

<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />

Ensuite, vous devez faire:

$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );

Le deuxième argument est donc ce qui a été utilisé comme argument pour wp_create_nonce() .

2ème argument: la méthode wp_nonce_field()

Si vous avez créé le nonce en utilisant wp_nonce_field() like:

wp_nonce_field( 'another_action', 'message-send' );

Ensuite, vous devez vérifier le nonce comme suit:

$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );

Donc, cette fois, l'action est ce qui est passé comme premier argument à wp_nonce_field().

Résumer

Pour réussir la validation wp_verify_nonce(), vous devez passer 2 arguments à la fonction, l'un est la valeur dans le champ masqué nonce, l'autre est la action, et dépend de la façon dont la valeur nonce a été construite.

12
gmazzap