Nonce WordPress

Оригинальное название: WordPress nonce

Коротко

Одноразовый по смыслу защитный токен WordPress, который подтверждает, что действие запросил сам пользователь со страницы сайта, а не чужая страница от его имени.

Что такое «Nonce WordPress»

Слово nonce означает «number used once» — число, используемое один раз. Его задача — защитить от подделки межсайтовых запросов (CSRF). Представьте: администратор вошёл в админку, а потом открыл чужой сайт, где спрятана форма, отправляющая запрос «удалить запись 15» на ваш домен. Браузер приложит cookie авторизации, и без дополнительной проверки WordPress выполнит команду. Nonce закрывает эту дыру: в настоящую форму сервер заранее вписывает токен, которого злоумышленник знать не может.

Как устроен nonce в WordPress

Название немного обманчиво. Токен WordPress не одноразовый: он вычисляется из названия действия, ID пользователя, его сессии и отрезка времени и действует до суток, причём повторно. Ключ NONCE_KEY из wp-config.php участвует в расчёте. У разных пользователей и разных действий токены разные.

Пример проверки в обработчике формы

// В форме
wp_nonce_field( 'delete_order', 'order_nonce' );

// В обработчике
if ( ! isset( $_POST['order_nonce'] )
    || ! wp_verify_nonce( $_POST['order_nonce'], 'delete_order' ) ) {
    wp_die( 'Ссылка устарела, обновите страницу.' );
}
if ( ! current_user_can( 'delete_posts' ) ) {
    wp_die( 'Недостаточно прав.' );
}

Для ссылок есть wp_nonce_url(), для админки — check_admin_referer(), для AJAX-запросов — check_ajax_referer(). REST API ждёт токен для действия wp_rest в заголовке X-WP-Nonce.

Чего nonce не делает

  • Не проверяет права. Токен подтверждает намерение, но не то, что пользователю это действие разрешено. Без current_user_can() и проверки возможностей защита неполная.
  • Не живёт вечно. Если страницу с формой закешировали надолго, через сутки токен в ней станет недействительным, и отправка начнёт падать с ошибкой. Формы в кешируемых страницах либо исключают из кеша, либо получают токен отдельным запросом.
  • Не защищает от гостевых атак так же надёжно: для незалогиненных посетителей токен у всех одинаковый.

Это одна из базовых мер безопасности приложения, и её отсутствие — частая находка при проверке самописных плагинов.

Обновлено:

Все термины раздела «WordPress»

Что будем искать? Например,Продвижение