Я вижу, что wp_nonce_field генерирует значение в скрытом поле.
<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />
Но wp_verify_nonce не использует это значение, насколько я могу судить, но я могу ошибаться.
Похоже, что он использует токен сеанса для проверки.
$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
if ( hash_equals( $expected, $nonce ) )
{ return 1; }
Тогда какой смысл иметь атрибут value в скрытом поле?
nonce
verification
изд-та
источник
источник
$nonce
значение - проверка возвращает false, если$nonce
значение отсутствует.$nonce
значение в этом сравнении:hash_equals( $expected, $nonce )
Ответы:
TL; DR
Короче говоря,
wp_verify_nonce()
использует это значение, потому что ожидает это значение в качестве первого аргумента.wp_verify_nonce()
аргументыwp_verify_nonce()
получает 2 аргумента:$nonce
$action
Значение в скрытом поле (
'cabfd9e42d'
в вашем примере) представляет$nonce
.1-й аргумент - это одноразовый номер, полученный из запроса
На самом деле,
wp_verify_nonce()
должны быть использованы так:Таким образом, первый передаваемый аргумент
wp_verify_nonce()
- это именно то значение, которое присутствует в скрытом поле.2-й аргумент:
wp_create_nonce()
методЧто касается второго аргумента, это зависит от того, как вы строите одноразовое значение.
Например, если вы сделали:
Тогда вам нужно сделать:
Итак, второй аргумент - это то, что использовалось в качестве аргумента
wp_create_nonce()
.2-й аргумент:
wp_nonce_field()
методЕсли вы создали одноразовый номер, используя
wp_nonce_field()
как:Затем вам нужно проверить одноразовый номер так:
Итак, на этот раз действие - это то, что передано в качестве первого аргумента
wp_nonce_field()
.резюмировать
Чтобы пройти
wp_verify_nonce()
валидацию, вам нужно передать 2 аргумента функции, один из которых - значение в скрытом поле nonce, другой - действие и зависит от того, как было создано значение nonce.источник