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 , інакше можуть виникнути проблеми.
Про одноразові числа читайте в окремій статті .
Це init .
Заміна функції (перевизначення) — у плагіні можна створити функцію з такою самою назвою, тоді вона замінить поточну функцію.
(дуже швидко) | 50000 разів – 0.21 сек
(дуже швидко) |
PHP 7.1.1, WP 4.7.2
Хуки з функції
Повертає
Строку
. Рядок: унікальне поєднання знаків.
Використання
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 були integrated with nonce creation |
Код wp_create_nonce() wp create nonce WP 6.0.2
function wp_create_nonce( $action = -1 ) { $user = wp_get_current_user(); $uid = (int) $user->ID; if ( ! $uid ) { /** Цей filter is documented в wp-includes/pluggable.php */ $uid = apply_filters( 'nonce_user_logged_out', $uid, $action ); } $token = wp_get_session_token(); $i = wp_nonce_tick(); return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 ); }