Как отключить JSON REST API в WordPress: практические решения и примеры кода

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

Что такое JSON REST API и почему его могут захотеть отключить

REST API был внедрён в WordPress начиная с версии 4.7. Он обеспечивает интерфейс для получения и изменения данных сайта в формате JSON через HTTP-запросы. Это мощный инструмент для разработчиков, но с точки зрения безопасности он открывает дополнительные точки входа.

Ниже приведены основные причины отключения REST API:

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

Как проверить, активен ли REST API на вашем сайте

Чтобы понять, работает ли REST API, достаточно открыть адрес https://ваш_сайт/wp-json/. Если вы видите JSON-ответ с информацией о сайте — API активен.

Для проверки можно использовать инструменты разработчика в браузере или сделать запрос через curl:

curl -I https://ваш_сайт/wp-json/

Полученный ответ с кодом 200 говорит о том, что API доступен.

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

Самый простой способ — использовать готовые плагины. Вот несколько популярных:

  • Disable REST API — плагин от Джея Каларда (Jay Calard), который полностью отключает REST API для неавторизованных пользователей.
  • WP Disable REST API — плагин с дополнительными настройками, позволяющий точечно ограничивать доступ к API.

Установка и активация плагина происходит через стандартную админ-панель WordPress. После активации API перестанет отвечать на запросы от гостей.

Отключение REST API программно: пример кода

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

function wphide_disable_rest_api( $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', 'wphide_disable_rest_api' );

Этот код блокирует доступ к REST API для неавторизованных пользователей, возвращая ошибку 401. При этом администраторы и авторизованные пользователи продолжают пользоваться API.

Полное отключение REST API

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

function wphide_fully_disable_rest_api() {
    // Отключаем REST API
    add_filter( 'rest_enabled', '__return_false' );
    add_filter( 'rest_jsonp_enabled', '__return_false' );
}
add_action( 'init', 'wphide_fully_disable_rest_api' );

Но будьте осторожны: это может нарушить работу некоторых плагинов и тем, которые полагаются на REST API.

Ограничение доступа к REST API по IP или авторизации

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

Пример кода, разрешающего доступ только администраторам:

function wphide_restrict_rest_api_access( $access ) {
    if ( ! current_user_can( 'manage_options' ) ) {
        return new WP_Error( 'rest_cannot_access', 'Доступ к REST API разрешён только администраторам.', array( 'status' => 403 ) );
    }
    return $access;
}
add_filter( 'rest_authentication_errors', 'wphide_restrict_rest_api_access' );

Для ограничения по IP можно использовать глобальные фильтры в файлах конфигурации сервера (например, .htaccess) или добавить проверку IP в функцию выше.

Проверка после отключения: как убедиться, что REST API действительно заблокирован

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

Для проверки можно использовать curl:

curl -I https://ваш_сайт/wp-json/

Если вы получили ошибку 401 или 403, значит блокировка сработала.

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

Заключение

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

Всегда тестируйте сделанные изменения и учитывайте особенности вашего сайта и используемых плагинов.

⭐⭐⭐⭐⭐