Как защитить REST API WordPress от неавторизованных запросов

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

Почему важно защищать REST API WordPress

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

  • Собирать информацию о пользователях, их ролях и правах.
  • Проводить атаки перебором (brute force) через API.
  • Использовать API для массового создания или удаления данных.

Поэтому важно ограничивать доступ к REST API и проверять авторизацию для критичных запросов.

Как ограничить доступ к REST API с помощью кода

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

Самый простой способ — полностью блокировать REST API для гостей и разрешать только авторизованным пользователям. Для этого добавим фильтр в файл functions.php вашей темы или в кастомный плагин:

add_filter('rest_authentication_errors', 'wpauth_filter_rest_api_access');
function wpauth_filter_rest_api_access($result) {
    if (!empty($result)) {
        return $result; // Уже есть ошибка
    }
    if (!is_user_logged_in()) {
        return new WP_Error('rest_forbidden', 'Доступ к REST API разрешён только авторизованным пользователям.', array('status' => 401));
    }
    return $result;
}

Этот код блокирует все запросы к REST API, если пользователь не вошёл в систему. Такой подход очень простой, но может сломать работу публичных функций, которые используют API, например, получение публичных постов.

Избирательное ограничение доступа к определённым эндпоинтам

Если нужно заблокировать не весь API, а только чувствительные маршруты, можно проверять URI запроса:

add_filter('rest_authentication_errors', 'wpauth_restrict_rest_routes');
function wpauth_restrict_rest_routes($result) {
    if (!empty($result)) {
        return $result;
    }
    $request = rest_get_server()->get_current_request();
    $route = $request->get_route();

    $restricted_routes = [
        '/wp/v2/users',
        '/wp/v2/comments',
        '/wp/v2/settings'
    ];

    foreach ($restricted_routes as $restricted_route) {
        if (strpos($route, $restricted_route) === 0 && !is_user_logged_in()) {
            return new WP_Error('rest_forbidden', 'Доступ к этому API ограничен.', ['status' => 401]);
        }
    }
    return $result;
}

Так мы разрешим публичный доступ к общим данным, но закроем чувствительные разделы.

Двухфакторная аутентификация для REST API

Для повышения безопасности можно добавить двухфакторную аутентификацию (2FA) при доступе к API. Один из способов — использовать JWT-токены с дополнительной проверкой.

Популярный плагин Clearfy Pro предлагает опции безопасности, включая защиту REST API и 2FA. Его можно использовать как готовое решение без написания кода.

Добавление токенов авторизации для REST API

Для внешних приложений и сервисов удобно использовать авторизацию через токены. Рассмотрим пример реализации JWT аутентификации:

add_action('rest_api_init', function () {
    register_rest_route('wpauth/v1', '/token', array(
        'methods'  => 'POST',
        'callback' => 'wpauth_generate_jwt_token',
        'permission_callback' => '__return_true',
    ));
});

function wpauth_generate_jwt_token(WP_REST_Request $request) {
    $username = $request->get_param('username');
    $password = $request->get_param('password');

    $user = wp_authenticate($username, $password);
    if (is_wp_error($user)) {
        return new WP_Error('invalid_credentials', 'Неверное имя пользователя или пароль', ['status' => 403]);
    }

    $issuedAt = time();
    $expire = $issuedAt + (DAY_IN_SECONDS);

    $payload = [
        'iss' => get_site_url(),
        'iat' => $issuedAt,
        'exp' => $expire,
        'user_id' => $user->ID,
    ];

    $jwt = JWT::encode($payload, 'секретный_ключ');

    return ['token' => $jwt];
}

Для работы с JWT можно использовать библиотеку firebase/php-jwt. После выдачи токена, API запросы должны содержать заголовок Authorization: Bearer <token>, и вы проверяете его в каждом запросе.

Использование плагинов для защиты REST API

Если нет желания писать код, можно применить готовые плагины:

  • Clearfy Pro — расширенная безопасность, ограничение REST API, блокировка по IP, 2FA, упрощённая настройка.
    Подробнее на WPSHOP
  • Disable REST API — простой плагин, который отключает REST API для неавторизованных пользователей.
  • JWT Authentication for WP REST API — реализует JWT авторизацию и позволяет интегрировать API с внешними сервисами.

Логирование и мониторинг REST API запросов

Для контроля и безопасности рекомендуется вести логи обращений к API. Это поможет выявить подозрительную активность и своевременно реагировать. Можно использовать плагины типа WP Activity Log или настроить собственные хуки:

add_action('rest_api_init', function () {
    add_filter('rest_pre_dispatch', function ($response, $server, $request) {
        $route = $request->get_route();
        $ip = $_SERVER['REMOTE_ADDR'];
        error_log("REST API call to $route from IP $ip");
        return $response;
    }, 10, 3);
});

Это поможет записывать в логи все вызовы API с указанием маршрута и IP адреса.

Итоги и рекомендации по защите REST API WordPress

Защита REST API — обязательный элемент безопасности современного сайта на WordPress. В зависимости от задач, можно:

  • Полностью закрыть API для гостей — простой и эффективный метод.
  • Ограничить доступ к критичным маршрутам.
  • Использовать токены и JWT для авторизации внешних сервисов.
  • Применять двухфакторную аутентификацию и плагины безопасности, такие как Clearfy Pro.
  • Вести логи и мониторить активность для раннего выявления угроз.

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

WordPress OAuth2 интеграция: практическое руководство с примерами кода
28.11.2025
WordPress автоматическая смена пароля при первом входе
14.01.2026
WordPress OTP авторизация через SMS и Email: настройка и примеры кода
14.12.2025
Как создать собственную авторизацию в WordPress: практические примеры и код
09.11.2025
WordPress авторизация с использованием WebAuthn: настройка и практические примеры
12.03.2026