wp_create_nonce()
Создает уникальный защитный ключ на короткий промежуток времени (от 12 до 24 часов).
Ключ создается как часть хэша из:
-
Для авторизованных юзеров:
метка_времени | action | ID_юзера | $token_сессии | wp_salt
-
Для неавторизованных:
метка_времени | action | wp_salt
Если измениться любое из значений, nonce поменяется. Заранее высчитать какой будет нонс код практически невозможно. Разумеется чем больше в нем изменяемых переменных тем он уникальнее.
Для всех неавторизованных пользователей создается одинаковый nonce код (проверял). Так например, можно зайти на сайт скопировать из HTML или из нужного запроса код и использовать его для злых целей против другого неавторизованного пользователя. Технически мы всегда можем точно узнать nonce код для любого неавторизованного пользователя, поэтому для неавторизованных пользователей использовать nonce код для какой-то защиты смысла не много.
Время жизни nonce ключа можно изменить через фильтр nonce_life
$nonce_life = apply_filters( 'nonce_life', DAY_IN_SECONDS );
Имейте ввиду, указываемое значение делится на 2 - это своего рода 2 варианта: до и после. По умолчанию код создается на 24 часа (один день) и при проверке кода через wp_verify_nonce() функция вернет нам 1 или 2, в зависимости от того, какой половине (первым 12 часам или вторым) соответствует nonce код.
Используйте функцию во время или после события init, иначе могут возникнуть проблемы.
Про одноразовые числа читайте в отдельной статье.
Pluggable функция — эту функцию можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.
Замена функции (переопределение) — в must-use или обычном плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.
Хуки из функции
Возвращает
Строку
. Строку: уникальное сочетание знаков.
Использование
wp_create_nonce( $action );
- $action(строка)
- Значение на основе которого будет создан уникальный ключ.
По умолчанию: -1
Примеры
#1 Получим уникальный ключ
echo wp_create_nonce(); // выведет подобный ключ: c6d25d33be
#2 Пример создания проверочного поля формы
Создадим проверочный код и добавим его в УРЛ, а затем проверим этот код:
<?php $nonce = wp_create_nonce('my-nonce'); ?> <a href='myplugin.php?_wpnonce=<?php echo $nonce ?>&data=mydata'> ... <?php // теперь, там где получаем данные проверяем $nonce = $_REQUEST['_wpnonce']; if( ! wp_verify_nonce( $nonce, 'my-nonce') ) die('Проверка не пройдена!'); ?>
Список изменений
С версии 2.0.3 | Введена. |
С версии 4.0.0 | Session tokens were integrated with nonce creation. |
Код wp_create_nonce() wp create nonce WP 6.5.2
function wp_create_nonce( $action = -1 ) { $user = wp_get_current_user(); $uid = (int) $user->ID; if ( ! $uid ) { /** This filter is documented in wp-includes/pluggable.php */ $uid = apply_filters( 'nonce_user_logged_out', $uid, $action ); } $token = wp_get_session_token(); $i = wp_nonce_tick( $action ); return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 ); }