wp_create_nonce() WP 2.0.3

Створює унікальний захисний ключ на короткий час (від 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 .

Заміна функції (перевизначення) — у плагіні можна створити функцію з такою самою назвою, тоді вона замінить поточну функцію.

Працює на основі:
wp_nonce_tick() ,
wp_get_session_token() ,
wp_get_current_user()
Основа для:
wp_nonce_url() ,
wp_nonce_field()
1 раз – 0.000025 сек
(дуже швидко) | 50000 разів – 0.21 сек
(дуже швидко) |
PHP 7.1.1, WP 4.7.2

Хуки з функції

Повертає

Строку. Рядок: унікальне поєднання знаків.

Використання

wp_create_nonce($action);
$action
(рядок)
Значення, на основі якого буде створено унікальний ключ.


За замовчуванням: -1

Приклади

0

#1 Отримаємо унікальний ключ

echo wp_create_nonce();
// виведе такий ключ: c6d25d33be
0

#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.0Session tokens були integrated with nonce creation

Код 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *