¿Cómo funciona la verificación de nonce?

12

Puedo ver que wp_nonce_field genera un valor en el campo oculto.

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

Pero wp_verify_nonce no está usando ese valor por lo que puedo decir, pero puedo estar equivocado.

Parece que está usando un token de sesión para verificación.

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

Entonces, ¿qué sentido tiene tener un atributo de valor en el campo oculto?

    
pregunta ed-ta 12.07.2015 - 19:01

1 respuesta

12

TL; DR

En resumen, wp_verify_nonce() usa ese valor porque espera ese valor como su primer argumento.

wp_verify_nonce() argumentos

wp_verify_nonce() recibe 2 argumentos:

  1. $nonce
  2. $action

El valor en el campo oculto ( 'cabfd9e42d' en tu ejemplo) representa el $nonce .

El primer argumento es el nonce y proviene de la solicitud

De hecho, wp_verify_nonce() tiene que usarse así:

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

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

Por lo tanto, el primer argumento pasado a wp_verify_nonce() es exactamente el valor que está presente en el campo oculto.

2do argumento: el método wp_create_nonce()

En cuanto al segundo argumento, depende de cómo construya el valor de nonce.

Por ejemplo, si lo hiciste:

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

Entonces tienes que hacer:

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

Entonces, el segundo argumento es lo que se usó como argumento para wp_create_nonce() .

2do argumento: el método wp_nonce_field()

Si creó el nonce utilizando wp_nonce_field() como:

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

Entonces necesitas verificar el nonce así:

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

Entonces, esta vez, la acción es lo que se pasa como primer argumento a wp_nonce_field() .

Recapitulación

Para pasar la validación de wp_verify_nonce() necesita pasar 2 argumentos a la función, uno es el valor en el campo oculto de nonce, el otro es la acción , y depende de cómo fue el valor de nonce construido.

    
respondido por el gmazzap 12.07.2015 - 19:58

Lea otras preguntas en las etiquetas