Безопасность WordPress: Каким кодом проверить наличие эндпоинта /wp/v2/users/ и ограничить к нему доступ для неавторизованных лиц?

Эндпоинт `/wp/v2/users/` является частью WordPress REST API и по умолчанию доступен всем, включая неавторизованных пользователей. Это создаёт серьёзную уязвимость — злоумышленники могут получить список логинов (username) всех зарегистрированных пользователей сайта и использовать их для брутфорс-атак.

## Как проверить наличие открытого эндпоинта

Откройте браузер или используйте curl и перейдите по адресу:

https://ваш-сайт.ru/wp-json/wp/v2/users/

Если в ответ вы получаете JSON-массив с данными пользователей (id, name, slug и т.д.) без авторизации — эндпоинт открыт и требует защиты.

Также можно проверить через curl:
bash
curl -s https://ваш-сайт.ru/wp-json/wp/v2/users/ | python3 -m json.tool

## Как ограничить доступ к /wp/v2/users/ для неавторизованных пользователей

Добавьте следующий код в файл `functions.php` вашей активной темы или в плагин:

php
add_filter( ‘rest_endpoints’, function( $endpoints ) {
if ( ! is_user_logged_in() ) {
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 для всех неавторизованных запросов.

## Альтернативный способ через rest_authentication_errors

php
add_filter( ‘rest_authentication_errors’, function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
$current_route = $GLOBALS[‘wp’]->query_vars[‘rest_route’] ?? »;
if ( strpos( $current_route, ‘/wp/v2/users’ ) === 0 ) {
return new WP_Error(
‘rest_not_logged_in’,
__( ‘Доступ запрещён. Требуется авторизация.’, ‘textdomain’ ),
array( ‘status’ => 401 )
);
}
}
return $result;
});

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

— **Скройте имена пользователей** из архивов автора через редирект или плагин.
— **Используйте плагины безопасности**: Wordfence, iThemes Security или All In One WP Security — они предлагают встроенные настройки для отключения REST API для гостей.
— **Ограничьте REST API полностью** для неавторизованных пользователей, если он не нужен публично.
— **Регулярно проверяйте** открытые эндпоинты с помощью инструментов типа WPScan.

После внедрения кода повторно проверьте эндпоинт — в ответ должна вернуться ошибка 401 или 404.


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

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