Come funziona la verifica del nonce?
Posso vedere che wp_nonce_field genera un valore nel campo hidden.
<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />
Ma wp_verify_nonce non sembra utilizzare quel valore per quanto ne so, anche se potrei sbagliarmi.
Sembra che utilizzi un token di sessione per la verifica.
$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
if ( hash_equals( $expected, $nonce ) )
{ return 1; }
Allora qual è lo scopo di avere un attributo value nel campo hidden?
TL;DR
In breve, wp_verify_nonce()
utilizza quel valore perché si aspetta quel valore come primo argomento.
Argomenti di wp_verify_nonce()
wp_verify_nonce()
riceve 2 argomenti:
$nonce
$action
Il valore nel campo hidden ('cabfd9e42d'
nel tuo esempio) rappresenta il $nonce
.
Il primo argomento è il nonce e proviene dalla richiesta
Infatti, wp_verify_nonce()
deve essere usato in questo modo:
// qui assumo che il form venga inviato usando il metodo 'post'
$verify = wp_verify_nonce($_POST['message-send']);
Quindi il primo argomento passato a wp_verify_nonce()
è esattamente il valore presente nel campo hidden.
Secondo argomento: il metodo wp_create_nonce()
Per quanto riguarda il secondo argomento, dipende da come hai costruito il valore del nonce.
Ad esempio, se hai fatto:
<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />
Allora devi fare:
$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );
Quindi, il secondo argomento è ciò che è stato usato come argomento per wp_create_nonce()
.
Secondo argomento: il metodo wp_nonce_field()
Se hai creato il nonce usando wp_nonce_field()
così:
wp_nonce_field( 'another_action', 'message-send' );
Allora devi verificare il nonce in questo modo:
$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );
Quindi, questa volta, l'azione è qualunque cosa sia stata passata come primo argomento a wp_nonce_field()
.
Riepilogo
Per superare la validazione di wp_verify_nonce()
devi passare 2 argomenti alla funzione: uno è il valore nel campo hidden del nonce, l'altro è l'azione, e dipende da come è stato costruito il valore del nonce.
