Как в WordPress REST API отключить определенные эндпоинты (например, доступ к списку пользователей по ID) для повышения безопасности сайта?

WordPress REST API — мощный инструмент, но открытые эндпоинты могут стать уязвимостью. Особенно опасен эндпоинт `/wp-json/wp/v2/users`, который раскрывает логины и ID всех зарегистрированных пользователей. Рассмотрим несколько способов ограничить доступ к нежелательным маршрутам.

## 1. Отключение конкретных эндпоинтов через хук `rest_endpoints`

Самый гибкий способ — использовать фильтр `rest_endpoints` в файле `functions.php` вашей темы или в плагине:

php
add_filter( ‘rest_endpoints’, function( $endpoints ) {
// Отключаем доступ к списку пользователей
if ( isset( $endpoints[‘/wp/v2/users’] ) ) {
unset( $endpoints[‘/wp/v2/users’] );
}
if ( isset( $endpoints[‘/wp/v2/users/(?P[d]+)’] ) ) {
unset( $endpoints[‘/wp/v2/users/(?P[d]+)’] );
}
return $endpoints;
});

Этот код полностью удаляет маршруты пользователей из REST API. Аналогично можно убрать любые другие эндпоинты — комментарии, медиафайлы, таксономии.

## 2. Ограничение доступа только для авторизованных пользователей

Если полное отключение нежелательно, можно закрыть эндпоинт для неавторизованных запросов:

php
add_filter( ‘rest_authentication_errors’, function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error(
‘rest_not_logged_in’,
‘Доступ только для авторизованных пользователей.’,
array( ‘status’ => 401 )
);
}
return $result;
});

Внимание: этот вариант блокирует весь REST API для гостей, что может сломать работу плагинов (WooCommerce, Gutenberg и др.).

## 3. Отключение REST API полностью для неавторизованных

Более точечный подход — проверять конкретный маршрут внутри хука:

php
add_action( ‘rest_api_init’, function() {
register_rest_route( ‘custom/v1’, ‘/block-users’, array(
‘permission_callback’ => function() {
return current_user_can( ‘manage_options’ );
}
));
});

## 4. Использование плагинов

Если не хочется писать код, используйте плагины:
— **Disable REST API** — отключает API для незалогиненных пользователей.
— **WP Hide & Security Enhancer** — скрывает и переименовывает стандартные маршруты.
— **iThemes Security / Wordfence** — комплексная защита с опцией ограничения REST API.

## 5. Дополнительные меры безопасности

— Измените стандартный префикс `/wp-json/` через `.htaccess` или плагин.
— Заблокируйте доступ к `/wp-json/` на уровне веб-сервера (Nginx/Apache) для определённых IP.
— Используйте аутентификацию через JWT или Application Passwords для API-запросов.
— Регулярно проверяйте список активных маршрутов через `/wp-json/` и удаляйте неиспользуемые.

Комбинирование этих методов обеспечит надёжную защиту REST API WordPress без потери функциональности сайта.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.