Widzę, że wp_nonce_field generuje wartość w ukrytym polu.
<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />
Ale wp_verify_nonce nie używa tej wartości, o ile wiem, ale mogę się mylić.
Wygląda na to, że używa tokena sesji do weryfikacji.
$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
if ( hash_equals( $expected, $nonce ) )
{ return 1; }
Po co więc mieć atrybut wartości w ukrytym polu?
nonce
verification
ed-ta
źródło
źródło
$nonce
Tam też masz wartość - czek zwraca wartość false, jeśli$nonce
brakuje wartości.$nonce
wartość w tym porównaniu:hash_equals( $expected, $nonce )
Odpowiedzi:
TL; DR
Krótko mówiąc,
wp_verify_nonce()
używa tej wartości, ponieważ oczekuje jej jako pierwszego argumentu.wp_verify_nonce()
argumentywp_verify_nonce()
otrzymuje 2 argumenty:$nonce
$action
Wartość w ukrytym polu (
'cabfd9e42d'
w twoim przykładzie) reprezentuje$nonce
.Pierwszy argument jest nonce i pochodzi z żądania
W rzeczywistości
wp_verify_nonce()
muszą być używane w ten sposób:Tak więc pierwszym przekazywanym argumentem
wp_verify_nonce()
jest dokładnie wartość obecna w ukrytym polu.Drugi argument:
wp_create_nonce()
metodaJeśli chodzi o drugi argument, zależy to od sposobu budowania wartości nonce.
Np. Jeśli zrobiłeś:
Następnie musisz zrobić:
Tak więc drugi argument jest tym, co zostało użyte jako argument
wp_create_nonce()
.Drugi argument:
wp_nonce_field()
metodaJeśli utworzyłeś nonce używając
wp_nonce_field()
:Następnie musisz zweryfikować nonce:
Tym razem akcja jest tym, co przekazano jako pierwszy argument
wp_nonce_field()
.Podsumować
Aby przekazać
wp_verify_nonce()
sprawdzanie poprawności, musisz przekazać 2 argumenty do funkcji, jeden to wartość w ukrytym polu nonce, drugi to akcja i zależy od tego, jak zbudowano wartość nonce.źródło