REST API — мощный инструмент WordPress, который позволяет создавать взаимодействия с сайтом извне, использовать мобильные приложения и интеграции. Однако для некоторых проектов, особенно если REST API не используется, его открытость может стать уязвимостью, позволяя злоумышленникам получить конфиденциальные данные или проводить атаки.
Что такое REST API и почему его иногда нужно отключать
REST API — это интерфейс прикладного программирования, который позволяет получать и изменять данные сайта через HTTP-запросы в формате JSON. Он встроен в WordPress с версии 4.7 и по умолчанию включен для всех сайтов.
Однако, если ваш сайт не использует REST API для внешних сервисов, его открытость увеличивает поверхность атаки. Например, можно получить список пользователей, данные о публикациях и другую информацию, которая может быть использована для взлома.
Поэтому задача администраторов — ограничить или полностью отключить REST API, если он не нужен, чтобы повысить безопасность WordPress.
Методы отключения REST API в WordPress
Отключение REST API для неавторизованных пользователей с помощью кода
Самый простой способ — добавить в файл functions.php вашей темы или в собственный плагин следующий код:
function wpscan_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', 'wpscan_disable_rest_api_for_guests' );Этот фильтр запрещает доступ к REST API для всех неавторизованных пользователей, возвращая ошибку 401. При этом авторизованные пользователи могут пользоваться API без ограничений.
Этот способ хорошо подходит, если вам необходимо разрешить работу внутренних приложений, плагинов и тем, использующих REST API, но закрыть доступ снаружи.
Полное отключение REST API
Если REST API не нужен вообще, его можно полностью отключить с помощью следующего кода:
function wpscan_disable_rest_api() {
// Отключаем REST API
add_filter( 'rest_enabled', '__return_false' );
add_filter( 'rest_jsonp_enabled', '__return_false' );
// Отключаем ссылки в заголовках HTTP
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
// Отключаем ссылку в HTML в <head>
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
}
add_action( 'after_setup_theme', 'wpscan_disable_rest_api' );Этот код полностью выключает REST API и удаляет все связанные с ним ссылки и заголовки, тем самым минимизируя риски.
Использование плагинов для управления REST API
Если вы предпочитаете готовые решения, есть несколько удобных плагинов, которые позволяют гибко управлять REST API без правки кода:
- Disable REST API — простой и популярный плагин, который полностью отключает REST API для гостей и дает опции для исключений.
- WP Cerber Security — комплексный плагин безопасности, который умеет ограничивать REST API по ролям и IP-адресам.
- Clearfy Pro — оптимизатор и средство защиты, позволяющее отключить REST API и убрать лишние REST-запросы для повышения безопасности и производительности.
Использование плагинов подойдёт тем, кто не хочет заниматься кодом, а также нуждается в дополнительных функциях защиты.
Тестирование и диагностика после отключения REST API
После внесения изменений важно проверить, как это повлияло на работу сайта и подключенных плагинов:
- Попробуйте обратиться к URL
https://ваш_сайт/wp-json/. Если REST API отключён, вы увидите ошибку или сообщение о запрете доступа. - Проверьте функции плагинов и темы, которые могут использовать REST API — например, редактор блоков Gutenberg, некоторые виджеты или кастомные интеграции.
- Если что-то перестало работать, рассмотрите настройку исключений для авторизованных пользователей или определённых ролей.
Для расширенной отладки можно воспользоваться консолью браузера и инструментами разработчика для анализа сетевых запросов.
Пример более гибкого контроля доступа к REST API
Если нужно разрешить REST API только администраторам и редакторам, а всем остальным запретить, используйте такой фильтр:
function wpscan_rest_api_access_by_role( $access ) {
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_cannot_access', __('REST API доступ закрыт для гостей.'), array( 'status' => 401 ) );
}
$allowed_roles = array( 'administrator', 'editor' );
$user = wp_get_current_user();
if ( array_intersect( $allowed_roles, $user->roles ) ) {
return $access;
}
return new WP_Error( 'rest_cannot_access', __('REST API доступ запрещён для вашей роли.'), array( 'status' => 403 ) );
}
add_filter( 'rest_authentication_errors', 'wpscan_rest_api_access_by_role' );Этот подход позволяет гибко настраивать безопасность, не ломая функциональность сайта для нужных пользователей.
Заключение
Отключение или ограничение REST API — важный шаг для повышения безопасности WordPress, особенно если API не используется внешними сервисами. Приведённые методы и примеры кода помогут быстро и эффективно закрыть доступ к REST API, не нарушая работу сайта.
Для дополнительных возможностей защиты и оптимизации можно использовать плагины Clearfy Pro или WP Cerber Security, которые интегрируются в WordPress и дают расширенный контроль над REST API и другими векторами атаки.
Больше полезных материалов и плагинов для защиты WordPress вы найдете на WPSHOP.ru.