¿Cómo funciona la verificación de nonce en WordPress?
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 según lo que puedo ver, aunque podría estar equivocado.
Parece que está usando un token de sesión para la verificación.
$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
if ( hash_equals( $expected, $nonce ) )
{ return 1; }
Entonces, ¿cuál es el propósito de tener un atributo value en el campo oculto?

En resumen
En pocas palabras, wp_verify_nonce()
utiliza ese valor porque espera ese valor como su primer argumento.
Argumentos de wp_verify_nonce()
wp_verify_nonce()
recibe 2 argumentos:
$nonce
$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()
debe usarse así:
// aquí asumo que el formulario se envía usando 'post' como método
$verify = wp_verify_nonce($_POST['message-send']);
Así que el primer argumento pasado a wp_verify_nonce()
es exactamente el valor que está presente en el campo oculto.
Segundo argumento: el método wp_create_nonce()
En cuanto al segundo argumento, depende de cómo construyas el valor del nonce.
Por ejemplo, si hiciste:
<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />
Entonces necesitas hacer:
$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );
Por lo tanto, el segundo argumento es lo que se usó como argumento para wp_create_nonce()
.
Segundo argumento: el método wp_nonce_field()
Si creaste el nonce usando wp_nonce_field()
así:
wp_nonce_field( 'another_action', 'message-send' );
Entonces necesitas verificar el nonce así:
$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );
Esta vez, la acción es lo que se pasó como primer argumento a wp_nonce_field()
.
Recapitulación
Para pasar la validación de wp_verify_nonce()
necesitas pasar 2 argumentos a la función, uno es el valor en el campo oculto del nonce, el otro es la acción, y depende de cómo se construyó el valor del nonce.
