Как работает проверка nonce?
Я вижу, что 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; }
Тогда какой смысл иметь атрибут значения в скрытом поле?
1 answers
TL;ДР
Короче говоря, wp_verify_nonce()
использует это значение, потому что оно ожидает это значение в качестве своего первого аргумента.
wp_verify_nonce()
аргументы
wp_verify_nonce()
получает 2 аргумента:
$nonce
$action
Значение в скрытом поле ('cabfd9e42d'
в вашем примере) представляет $nonce
.
1-й аргумент - это nonce, и он исходит из запроса
На самом деле, wp_verify_nonce()
должны использоваться как итак:
// here I assume that the form is submitted using 'post' as method
$verify = wp_verify_nonce($_POST['message-send']);
Таким образом, первый аргумент, переданный wp_verify_nonce()
, в точности соответствует значению, которое присутствует в скрытом поле.
2-й аргумент: метод wp_create_nonce()
Что касается второго аргумента, то это зависит от того, как вы строите значение nonce.
Например, если бы вы сделали:
<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />
Затем вам нужно сделать:
$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );
Итак, второй аргумент - это то, что было использовано в качестве аргумента для wp_create_nonce()
.
2-й аргумент: метод wp_nonce_field()
Если вы создали одноразовое использование wp_nonce_field()
например:
wp_nonce_field( 'another_action', 'message-send' );
Затем вам нужно проверить nonce следующим образом:
$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );
Итак, на этот раз действие - это то, что было передано в качестве первого аргумента wp_nonce_field()
.
Краткое изложение
Чтобы пройти проверку wp_verify_nonce()
, вам нужно передать функции 2 аргумента, один из которых - значение в скрытом поле nonce, другой - действие , и зависит от того, как было построено значение nonce.