Как отключить REST API для неавторизованных пользователей в WordPress

REST API в WordPress — мощный инструмент для взаимодействия с сайтом через HTTP-запросы. Однако по умолчанию он доступен всем, включая неавторизованных пользователей. Это может создавать потенциальные угрозы безопасности и увеличивать нагрузку на сервер. В этой статье мы подробно рассмотрим, как ограничить доступ к REST API только для авторизованных пользователей, а также приведём примеры кода и рекомендации по плагинам.

Почему стоит ограничивать доступ к REST API в WordPress

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

  • Утечка информации. Некоторые эндпоинты возвращают данные, которые лучше скрыть от гостей (например, данные пользователей).
  • Повышенная нагрузка. Автоматические запросы к API могут создавать избыточный трафик и нагружать сервер.
  • Уязвимости безопасности. Злоумышленники могут использовать открытый REST API для сканирования сайта и поиска слабых мест.

Поэтому часто возникает задача ограничить REST API только для авторизованной аудитории.

Как отключить REST API для неавторизованных пользователей — базовый метод

Добавим кастомный фильтр, который будет проверять авторизацию и блокировать доступ при отсутствии логина.

add_filter('rest_authentication_errors', 'wpauth_restrict_rest_api_access');
function wpauth_restrict_rest_api_access($result) {
    if (!empty($result)) {
        return $result; // Уже есть ошибка — пропускаем
    }

    if (!is_user_logged_in()) {
        return new WP_Error('rest_cannot_access', 'Доступ к REST API разрешён только авторизованным пользователям.', array('status' => 401));
    }

    return $result; // Авторизован — доступ разрешён
}

Этот код следует добавить в functions.php вашей темы или в кастомный плагин. Он перехватывает проверку доступа и возвращает ошибку 401 Unauthorized для гостей.

Как работает код

  • rest_authentication_errors — фильтр для проверки прав доступа к REST API.
  • Если пользователь не авторизован (!is_user_logged_in()), возвращается объект ошибки WP_Error с сообщением и HTTP статусом 401.
  • Авторизованные пользователи получают доступ без ограничений.

Ограничение доступа к REST API только для определённых эндпоинтов

Иногда нужно не полностью блокировать REST API для гостей, а только закрыть определённые маршруты. Например, можно разрешить открытый доступ к публичным типам записей, но запретить доступ к пользовательским данным.

Для этого используйте проверку параметра $request->get_route():

add_filter('rest_authentication_errors', 'wpauth_limit_rest_api_endpoints');
function wpauth_limit_rest_api_endpoints($result) {
    if (!empty($result)) {
        return $result;
    }

    if (is_user_logged_in()) {
        return $result;
    }

    $allowed_routes = [
        '/wp/v2/posts',
        '/wp/v2/pages'
    ];

    $request = rest_get_server()->get_current_request();
    $route = $request->get_route();

    foreach ($allowed_routes as $allowed_route) {
        if (strpos($route, $allowed_route) === 0) {
            return $result; // Разрешаем доступ к этим маршрутам
        }
    }

    return new WP_Error('rest_cannot_access', 'Доступ к REST API для данного маршрута запрещён.', array('status' => 401));
}

В этом примере гости смогут получать посты и страницы, но не смогут обращаться к другим эндпоинтам REST API.

Использование плагинов для управления доступом к REST API

Если не хочется писать код самостоятельно, можно использовать готовые решения. Вот несколько популярных плагинов:

  • Disable REST API — простой плагин, который полностью отключает REST API для неавторизованных пользователей.
  • Clearfy Pro — многофункциональный плагин оптимизации и безопасности, в котором есть гибкие настройки ограничения REST API. Подробнее на Clearfy Pro на WPSHOP.ru.
  • WP Cerber Security — комплексный плагин безопасности с возможностью блокировки REST API для гостей.

Использование плагинов удобно, если нужно быстро настроить ограничения без ручного кода.

Дополнительные рекомендации по безопасности REST API

Даже при ограниченном доступе к REST API стоит придерживаться следующих советов:

  • Регулярно обновляйте WordPress и плагины, чтобы закрыть известные уязвимости.
  • Используйте двухфакторную аутентификацию и сложные пароли для пользователей с доступом.
  • Ограничьте права пользователей, чтобы минимизировать возможный ущерб при взломе.
  • Мониторьте логи доступа для выявления подозрительной активности.

Резюме и выводы

Отключение REST API для неавторизованных пользователей — эффективный способ повысить безопасность и снизить нагрузку на сервер. При этом важно не блокировать публичный контент, если он должен оставаться доступным. Рекомендуется использовать фильтр rest_authentication_errors для гибкого контроля доступа, а при необходимости — готовые плагины, например Clearfy Pro.

Безопасность WordPress: защита от brute force атак
05.11.2025
WordPress кастомные редиректы после входа: настройка и практические примеры
13.11.2025
WordPress регистрация без подтверждения по Email: как реализовать и зачем
03.02.2026
WordPress авторизация через LDAP: настройка и примеры кода
07.03.2026
WordPress OTP авторизация через SMS и Email: настройка и примеры кода
14.12.2025