WPExperts

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

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

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

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

  • Собирать информацию о структуре сайта и пользователях.
  • Инициировать лишние запросы к серверу, создавая нагрузку.
  • Использовать API для проведения атак или взлома.

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

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

Самый простой и надежный способ — добавить в файл functions.php вашей темы или в кастомный плагин следующий код, который блокирует доступ к API для гостей:

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

Этот фильтр проверяет, залогинен ли пользователь при каждом запросе к REST API. Если нет — возвращает ошибку с кодом 401. Таким образом, неавторизованные посетители не смогут получать данные через API.

Тонкости и особенности метода

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

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

Отключение REST API с помощью плагинов

Если вы предпочитаете готовые решения без правки кода, рассмотрите следующие плагины:

  • Disable REST API — простой и популярный плагин, который полностью отключает REST API для неавторизованных пользователей. Узнать подробнее и скачать.
  • Clearfy Pro — многофункциональный плагин для оптимизации и безопасности WordPress. В нем есть опция для гибкой настройки доступа к REST API, включая отключение для гостей, ограничение по ролям и IP. Подробнее о Clearfy Pro.

Использование плагинов снижает риск ошибок и позволяет быстро изменить настройки через админ-панель.

Как проверить, что REST API отключен для гостей

После внесения изменений стоит убедиться, что REST API действительно недоступен для неавторизованных пользователей. Для этого:

  1. Откройте браузер в режиме инкогнито или используйте инструмент curl.
  2. Отправьте запрос к API, например, https://ваш_сайт.ru/wp-json/wp/v2/posts.
  3. Если всё настроено правильно, ответ будет содержать ошибку 401 или сообщение о запрете доступа.

Пример команды curl для проверки:

curl -i https://ваш_сайт.ru/wp-json/wp/v2/posts

В ответе при отключенном доступе вы увидите заголовок HTTP/1.1 401 Unauthorized и сообщение об ошибке.

Дополнительные советы по безопасности REST API

Помимо отключения для гостей, рекомендуем:

  • Использовать HTTPS для шифрования трафика.
  • Ограничивать доступ по IP, если API используется только внутренними приложениями.
  • Регулярно обновлять WordPress, темы и плагины для закрытия уязвимостей.
  • Проверять права пользователей и роли, чтобы ограничить доступ к чувствительным данным.

Пример ограничения доступа по IP

Если ваш REST API используется только с определенного IP, можно добавить такую проверку:

function wpexperts_restrict_rest_api_by_ip( $access ) {
    $allowed_ip = '123.456.789.000'; // замените на нужный IP
    if ( ! is_user_logged_in() && $_SERVER['REMOTE_ADDR'] !== $allowed_ip ) {
        return new WP_Error(
            'rest_cannot_access',
            'Доступ к REST API ограничен по IP.',
            array( 'status' => 403 )
        );
    }
    return $access;
}
add_filter( 'rest_authentication_errors', 'wpexperts_restrict_rest_api_by_ip' );

Такой подход полезен для API, используемых внутренними сервисами или интеграциями.

×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »