Функция 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 для дополнительной защиты.