Cum funcționează verificarea nonce în WordPress?
Văd că wp_nonce_field generează o valoare în câmpul hidden.
<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />
Dar wp_verify_nonce nu folosește acea valoare, din câte înțeleg, deși s-ar putea să greșesc.
Se pare că folosește un token de sesiune pentru verificare.
$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
if ( hash_equals( $expected, $nonce ) )
{ return 1; }
Atunci care este rostul atributului value în câmpul hidden?

Pe scurt
Pe scurt, wp_verify_nonce()
folosește acea valoare pentru că așteaptă acea valoare ca prim argument.
wp_verify_nonce()
argumente
wp_verify_nonce()
primește 2 argumente:
$nonce
$action
Valoarea din câmpul ascuns ('cabfd9e42d'
în exemplul tău) reprezintă $nonce
.
Primul argument este nonce-ul și vine din cerere
De fapt, wp_verify_nonce()
trebuie folosit astfel:
// aici presupun că formularul este trimis folosind metoda 'post'
$verify = wp_verify_nonce($_POST['message-send']);
Deci primul argument transmis la wp_verify_nonce()
este exact valoarea care este prezentă în câmpul ascuns.
Al doilea argument: metoda wp_create_nonce()
În ceea ce privește al doilea argument, acesta depinde de cum ai construit valoarea nonce.
De exemplu, dacă ai făcut:
<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />
Atunci trebuie să faci:
$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );
Deci, al doilea argument este ceea ce a fost folosit ca argument pentru wp_create_nonce()
.
Al doilea argument: metoda wp_nonce_field()
Dacă ai creat nonce-ul folosind wp_nonce_field()
astfel:
wp_nonce_field( 'another_action', 'message-send' );
Atunci trebuie să verifici nonce-ul astfel:
$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );
Deci, de data aceasta, acțiunea este orice a fost transmis ca prim argument la wp_nonce_field()
.
Rezumat
Pentru a trece de validarea wp_verify_nonce()
trebuie să transmiți 2 argumente funcției, unul este valoarea din câmpul ascuns nonce, celălalt este acțiunea și depinde de cum a fost construită valoarea nonce.
