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-сайта, особенно если вы не используете его функционал. С помощью простых фильтров и готовых плагинов можно быстро реализовать защиту и снизить риски взлома или утечки данных.
Всегда тестируйте сделанные изменения и учитывайте особенности вашего сайта и используемых плагинов.