wpmake.ru wordpress WPMake

Как запретить доступ к WP-Cron через REST API в WordPress

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

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

В WordPress с версии 4.4 появилась возможность запускать WP-Cron через REST API, что позволяет сторонним системам инициировать Cron-задачи. Однако это открывает потенциальную уязвимость, если REST endpoint не защищён должным образом:

  • Частые запросы к wp-cron могут создать нагрузку на сервер.
  • Злоумышленники могут инициировать большое количество Cron-задач, что приведёт к замедлению сайта.
  • Возможность проведения DoS-атак через REST API.

Поэтому для повышения безопасности и оптимизации работы сайта рекомендуется ограничить или полностью запретить доступ к WP-Cron через REST API.

Как проверить, доступен ли WP-Cron через REST API

Откройте в браузере или через curl следующий URL (замените example.com на свой сайт):

https://example.com/wp-json/wp/v2/cron

Если возвращается ответ с JSON-данными, значит REST endpoint WP-Cron доступен. Если ответ 404 или ошибка, то доступ уже ограничен.

Методы запрета доступа к WP-Cron через REST API

1. Отключение WP-Cron через константу

Если вы используете системный cron для запуска wp-cron.php, то можно полностью отключить WP-Cron, что исключит и REST API вызовы:

define('DISABLE_WP_CRON', true);

Добавьте эту строку в wp-config.php перед строкой /* That's all, stop editing! Happy blogging. */.

Но если WP-Cron нужен, то этот способ не подходит — он полностью отключает механизм.

2. Фильтрация REST API endpoint для WP-Cron

Лучший способ — добавить фильтр, который ограничит доступ к WP-Cron endpoint. Например, разрешить только администраторам или отключить весь REST endpoint WP-Cron.

Запретить доступ всем кроме авторизованных администраторов

add_filter('rest_endpoints', 'wpmake_filter_wp_cron_rest_endpoint');
function wpmake_filter_wp_cron_rest_endpoint($endpoints) {
    if (isset($endpoints['/wp/v2/cron'])) {
        $endpoints['/wp/v2/cron'][0]['permission_callback'] = function() {
            return current_user_can('manage_options');
        };
    }
    return $endpoints;
}

Таким образом, доступ к /wp/v2/cron будет только у администраторов.

Полное удаление REST endpoint WP-Cron

add_filter('rest_endpoints', 'wpmake_remove_wp_cron_rest_endpoint');
function wpmake_remove_wp_cron_rest_endpoint($endpoints) {
    if (isset($endpoints['/wp/v2/cron'])) {
        unset($endpoints['/wp/v2/cron']);
    }
    return $endpoints;
}

Это полностью исключит WP-Cron endpoint из REST API, что максимально безопасно.

Использование плагина Clearfy Pro для управления WP-Cron и REST API

Плагин Clearfy Pro предоставляет удобный интерфейс для оптимизации и безопасности WordPress, включая управление WP-Cron и REST API.

  • Отключение WP-Cron или его запуск по расписанию.
  • Блокировка REST API для нежелательных запросов.
  • Управление правами доступа к разным REST endpoint.

Использование Clearfy Pro позволяет не писать код вручную и быстро повысить безопасность сайта.

Тестирование и отладка ограничений доступа

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

  1. Отправьте запрос к https://example.com/wp-json/wp/v2/cron и убедитесь, что доступ закрыт для неавторизованных.
  2. Проверьте логи сервера на наличие ошибок.
  3. Убедитесь, что запланированные задачи выполняются (если WP-Cron не отключён).

Для мониторинга Cron-задач удобно использовать плагин WP Crontrol или аналогичные.

Выводы и рекомендации

Открытый доступ к WP-Cron через REST API — потенциальная угроза безопасности и ресурсная нагрузка. Рекомендуется:

  • Ограничить доступ к WP-Cron REST endpoint с помощью фильтров и прав пользователей.
  • Использовать системный cron и отключить WP-Cron (если возможно).
  • Применять плагины типа Clearfy Pro для удобного управления.
  • Регулярно тестировать и контролировать нагрузку на сервер.

Таким образом вы обеспечите безопасность и стабильность работы WordPress сайта.

×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙