Функция wp_nonce_field()
используется для создания скрытого одноразового поля (nonce) в HTML-форме. Это поле помогает защитить данные формы от атак с использованием поддельных запросов (CSRF — Cross-Site Request Forgery).
Nonce (одноразовое число) гарантирует, что данные формы отправлены именно с вашего сайта, а не из других источников. Хотя это не обеспечивает 100% защиту, использование таких полей значительно снижает риски несанкционированного доступа.
wp_nonce_field( int|string $action = -1, string $name = '_wpnonce', bool $referer = true, bool $display = true ): string
Параметры
- $action
(int|string)
— Уникальный идентификатор действия для генерации nonce. Это может быть строка или число, которое используется как ключ для создания уникальной комбинации символов.- По умолчанию:
-1
- По умолчанию:
- $name
(string)
— Имя атрибутаname
для скрытого поля в HTML-форме. Значение nonce будет доступно в массиве$_POST[$name]
.- По умолчанию:
_wpnonce
- По умолчанию:
- $referer
(bool)
— Добавляет дополнительное скрытое полеreferer
, которое содержит URL-адрес страницы, с которой была отправлена форма.- По умолчанию:
true
- По умолчанию:
- $display
(bool)
— Определяет, выводить ли результат напрямую или вернуть его как строку.- По умолчанию:
true
- По умолчанию:
Возвращаемое значение
Возвращает HTML-код скрытого поля формы, содержащего одноразовое значение (nonce). Если параметр $display
установлен в false
, возвращает строку HTML-кода без вывода на экран.
Пример 1: Усиленная защита
Для улучшения безопасности можно указать значения параметров $action
и $name
:
<form method="post">
<!-- другие поля формы -->
<?php wp_nonce_field('my_custom_action', 'my_nonce_field'); ?>
</form>
После отправки формы необходимо проверить переданные данные с помощью функции wp_verify_nonce()
:
if ( !isset($_POST['my_nonce_field']) || !wp_verify_nonce($_POST['my_nonce_field'], 'my_custom_action') ) {
echo 'Извините, проверочные данные не соответствуют.';
exit;
} else {
// Обрабатываем данные
}
Пример 2: Проверка в административной панели
Если данные принимаются в административной панели, можно использовать функцию check_admin_referer()
для проверки nonce:
function my_admin_handler() {
// Проверка одноразового поля и реферера
check_admin_referer('my_custom_action', 'my_nonce_field');
// Логика обработки
}
Функция check_admin_referer()
автоматически завершит выполнение PHP-скрипта при неудачной проверке и выведет сообщение об ошибке.
Пример 3: Стандартная защита формы
Простой пример использования без указания параметров:
<form method="post">
<?php wp_nonce_field(); ?>
</form>
Это создаст следующие скрытые поля:
<input type="hidden" id="_wpnonce" name="_wpnonce" value="4357708578" />
<input type="hidden" name="_wp_http_referer" value="/current-url" />
Для проверки данных используйте функцию wp_verify_nonce()
:
if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $_REQUEST['_wpnonce'], 'my_action' ) ) {
// Логика обработки данных
} else {
die( 'Ошибка безопасности' );
}
Примечания
- Использование параметров
$action
и$name
помогает усилить защиту от атак. В случае использования по умолчанию, злоумышленник может предугадать стандартные значения и попытаться их использовать. - Функция
wp_nonce_field()
тесно связана с функциейwp_verify_nonce()
, которая проверяет корректность nonce при получении данных формы.
Заключение
Функция wp_nonce_field()
используется для создания скрытого одноразового поля (nonce) в HTML-форме. Использование одноразовых полей (nonce) в формах WordPress является обязательным элементом безопасности. Не пренебрегайте возможностью указать уникальные значения параметров $action
и $name
для дополнительной защиты.