Как работает проверка 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;  }

Тогда какой смысл иметь атрибут значения в скрытом поле?

Author: ed-ta, 2015-07-12

1 answers

TL;ДР

Короче говоря, wp_verify_nonce() использует это значение, потому что оно ожидает это значение в качестве своего первого аргумента.

wp_verify_nonce() аргументы

wp_verify_nonce() получает 2 аргумента:

  1. $nonce
  2. $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.

 15
Author: gmazzap, 2015-07-12 18:03:30