wp_nonce_field()
Отримує або виводить приховане одноразове поле для форми.
Одноразове поле (nonce) потрібно для перевірки даних форми, щоб переконатися, що дані були відправлені з поточного сайту, а не від кудись ще. Таке поле не дає повного захисту, але захищає здебільшого. Використовувати перевірочне поле у формах обов’язково!
Якщо потрібно посилити захист, рекомендується вказати параметри $action (буде використаний як ключ для створення унікального поєднання символів) та $name . Якщо функцію викликати без параметрів, то буде використовуватися стандартний ключ і назва поля, але якщо хакери дізнаються базовий nonce код, то його не складно буде використовувати для атаки. Тому для важливих форм рекомендується вказувати параметри $action та $name .
Перевіряти значення поля, створеного цією функцією, необхідно за допомогою wp_verify_nonce() .
Про одноразові числа читайте в окремій статті .
wp_create_nonce()
settings_fields()
(швидко) | 50000 разів – 1.57 сек
(швидко)
Хуків немає.
Повертає
Строку
. Виводить на екран HTML код перевірочного поля форми.
Використання
wp_nonce_field( $action, $name, $referer, $echo );
-
$action
(рядок) -
Унікальний ідентифікатор для поля, що створюється. Ім’я саме цього перевірного поля.
За замовчуванням: -1 -
$name
(рядок) -
Параметр атрибута
name у HTML тега
input . Значення поля можна буде отримати із змінної
$_POST[$name] .
За замовчуванням: “_wpnonce” -
$referer
(логічний) -
Разом з nonce полем додається ще одне приховане поле referer (адреса сторінки, з якої надсилаються дані форми). Таке поле можна виводити окремо функцією
wp_referer_field() .
Типово: true -
$echo
(логічний) -
false – поверне дані до змінної, для подальшої обробки.
Типово: true
Приклади
#1 Захист даних форми
Звичайний приклад захисту даних форми: використовуємо такий код у коді форми:
<?php wp_nonce_field(); ?>
виведе:
<input type="hidden" id="_wpnonce" name="_wpnonce" value="5284708911" /> <input type="hidden" name="_wp_http_referer" value="/permalink" />
#2 Посилення захисту
Для кращого захисту можна вказати аргументи $action і $name :
<form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field('name_of_my_action','name_of_nonce_field'); ?> </form>
Після того, як дані форми були відправлені, при обробці даних потрібно перевірити код nonce за допомогою wp_verify_nonce() :
<?php if ( empty($_POST) || ! wp_verify_nonce( $_POST['name_of_nonce_field'], 'name_of_my_action') ){ print 'Вибачте, перевірочні дані не відповідають.'; exit; } else { // обробляємо дані }
#3 Перевірка даних, що передаються, форми в адмінці
Якщо ці форми приймаються всередині адмін-панелі, їх можна перевіряти функціями: check_admin_referer() . При невдачі, check_admin_referer() автоматично виведе повідомлення та перерве роботу php (die). Тобто. не треба вказувати, що робити, якщо дані не пройшли перевірку:
function my_handler_function(){ // Переконаємося, що запит не прострочений // При помилці, виведе повідомлення та перерве роботу PHP. check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' ); // працюємо }
список змін
З версії 2.0.4 | Введено. |
Код wp_nonce_field() wp nonce field WP 6.0.2
function wp_nonce_field( $action = -1, $name = '_wpnonce', $referer = true, $echo = true ) { $name = esc_attr($name); $nonce_field = '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . wp_create_nonce( $action ) . if ($ referer) { $nonce_field .= wp_referer_field( false ); } if ($ echo) { echo $nonce_field; } return $nonce_field; }