Comment fonctionne la vérification nonce?

12

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

<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 sert-il d'avoir un attribut value dans le champ caché?

    
posée ed-ta 12.07.2015 - 19:01

1 réponse

12

TL; DR

En bref, wp_verify_nonce() utilise cette valeur car elle s'attend à ce que cette valeur constitue son 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 premier 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']);

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

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

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

E.g. 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 à l'aide de wp_nonce_field() comme:

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écapitulatif

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

    
réponse donnée gmazzap 12.07.2015 - 19:58

Lire d'autres questions sur les étiquettes