Как ограничить REST API WordPress для гостей и сохранить Contact Form 7?

otklyuchit rest api wordpress gostej cover Без рубрики
Белый список contact-form-7, плагины DRA и MaxtDesign, тест users в инкогнито и отправка заявки. Без полного отключения REST по FAQ WordPress.

Вы поставили плагин «отключить REST API» — сайт открывается, а клиенты пишут: кнопка «Отправить» крутится. У Игоря из салона в консоли была ошибка wp-json/contact-form-7. Вы не знаете, что оставить открытым для Contact Form 7. Нужно не вырубить API целиком, а закрыть гостям лишнее и сохранить форму. За вечер: настройка, два теста в инкогнито, заявка снова на почте.

REST API в WordPress — это служебный «коридор» по адресу /wp-json/: через него формы, блок-редактор и обновления обмениваются данными с сайтом. Официальный FAQ прямо говорит: API нельзя отключать полностью — сломается админка. С 4.7 вместо старого rest_enabled используют фильтр rest_authentication_errors: гостям — ошибка доступа, залогиненным — как обычно. Contact Form 7 для незалогиненных отправителей REST нужен; автор плагина Disable WP REST API даёт отдельный гайд по белому списку — и в отзывах на wordpress.org одна звезда как раз за «форма перестала работать».

Один раз назовём термин: REST API (служебный интерфейс сайта) — не «дыра для хакеров», а необходимая часть WordPress. Ограничивают не его существование, а то, что видит гость без пароля. Угол простой: закрыть витрину с логинами для прохожих, но не отрубить провод к форме заявки.

Поймите, зачем закрывают wp-json для гостей и что нельзя вырубать целиком

Схема на листе у прилавка: зачем ограничивать wp-json для гостей

Любой может открыть в браузере адрес вида https://ваш-сайт.ru/wp-json/wp/v2/users и увидеть список имён пользователей — удобно ботам для подбора пароля к входу /wp-admin/. На практике это не мгновенный взлом, но лишняя подсказка. Ограничение для гостей не заменяет нормальный пароль и обновления — это один слой рядом с отключением редактора файлов в админке.

Типичная ошибка — плагин «Disable WP REST API» без whitelist: для гостей API закрыт, код 401, а в админке всё выглядит нормально, пока клиент не напишет в мессенджер. Полный бан бьёт и по CF7, и по виджетам. Для сайта услуг достаточно закрыть users и лишнее, форму оставить.

Выберите путь: плагин с белым списком, «одна кнопка» или код в дочерней теме

Чеклист на блокноте у прилавка: плагин, код или дочерняя тема

Если на сайте есть публичная форма заявки — не берите самый простой «выключить всё для гостей» без настроек. Три рабочих уровня:

Способ Кому подходит Риск для формы Гибкость
Disable WP REST API Лендинг без CF7/WPForms Высокий — форма часто ломается Низкая
Disable REST API (DRA) или REST API Guard Владелец с формой на сайте Низкий при whitelist namespace Средняя и выше
MaxtDesign REST API Control Уже стоит Contact Form 7 Ниже — CF7 часто в whitelist автоматически Средняя
Код rest_authentication_errors в дочерней теме Есть дочерняя тема или Code Snippets Зависит от вашего исключения для contact-form-7 Максимальная

Вердикт: для салона, клиники или мастера с CF7 начните с DRA или MaxtDesign, добавьте в белый список namespace contact-form-7. «Одна кнопка» Disable WP REST API — только если форм на фронте нет и вы проверили это дважды.

Код правят не в файлах ядра, а в дочерней теме или через плагин сниппетов — соседняя тема кластера безопасности: DISALLOW_FILE_EDIT в wp-config.

Настройте плагин с whitelist: блок гостей и маршруты Contact Form 7

Стикер whitelist CF7 на прилавке рядом с распечаткой настроек плагина

Workflow для DRA (Disable REST API на wordpress.org/plugins/disable-json-api): установить → включить блок для неавторизованных → добавить исключения → очистить кэш → проверить форму.

  1. Шаг 1. Сделайте бэкап или хотя бы запишите, какие плагины безопасности уже стоят — два «REST killer» вместе часто ломают сайт сильнее одного.
  2. Шаг 2. Установите Disable REST API (DRA) или MaxtDesign REST API Control из каталога WordPress. Активируйте режим «запретить анонимный доступ» / «disable for guests» — формулировки зависят от плагина.
  3. Шаг 3. В белый список маршрутов или namespace добавьте contact-form-7 (и при необходимости wpforms). У CF7 типичные пути под contact-form-7/v1: refill, feedback, feedback/schema — их описывают в гайдах вроде perishablepress.com для связки с REST-блокировкой.
  4. Шаг 4. Сохраните настройки и сбросьте кэш хостинга или плагина — часто форма «молчит» из-за старого JS, а не из-за REST.
  5. Шаг 5. В админке откройте запись в блок-редакторе: сохранение без ошибки значит, залогиненным API не отрезали.

REST API Shield предупреждает: без whitelist формы для гостей могут не отправляться.

Добавьте официальный код, если плагин не подходит

Developer.wordpress.org рекомендует хук rest_authentication_errors и is_user_logged_in(): гость получает ошибку на wp-json, кроме явно разрешенных адресов. Код в functions.php дочерней темы; исключение contact-form-7 — через DRA или мини-whitelist. На GitHub есть gist-сниппеты «REST only for logged in» — сверяйте с FAQ ядра перед вставкой. Gutenberg ломается чаще от полного бана, чем от этой схемы.

*Instagram,Facebook (принадлежит компании Meta, признанной экстремистской и запрещённой на территории РФ)

Проверьте результат двумя тестами без SSH и зафиксируйте успех

Критерии из чек-листа: в окне инкогнито запрос к https://ваш-сайт.ru/wp-json/wp/v2/users даёт ошибку доступа (401 или 403), а не JSON со списком логинов; тестовая заявка с формы приходит на почту или в CRM; в админке редактор блоков и обновления работают; в настройках плагина в whitelist указан contact-form-7 или аналог.

  1. Тест A. Откройте браузер в режиме инкогнито, вставьте в адресную строку …/wp-json/wp/v2/users. Должна быть ошибка, не таблица имён.
  2. Тест B. На главной отправьте форму с тестовым email и пометкой «тест REST». Письмо или уведомление CRM должно прийти за разумное время.
  3. Тест C. Под своим логином зайдите в админку, откройте запись, измените абзац, обновите — без белого экрана и без бесконечной загрузки.

Для владельца бизнеса пары тестов users + форма обычно достаточно. Если все три пункта success-критерия выполнены, можно считать задачу закрытой до следующего обновления плагина безопасности.

Если заявка снова «крутится»: откат, F12 и что написать в поддержку

На практике цепочка восстановления такая: деактивировать последний REST-плагин → очистить кэш → повторить тест B → нажать F12 в Chrome, вкладка Network, снова отправить форму и найти красную строку с wp-json в URL. Если в ошибке contact-form-7 — вернитесь в whitelist. WooCommerce и тяжёлые виджеты иногда требуют свой namespace в белом списке — проверяйте корзину в инкогнито так же, как форму.

После двух тестов всё ещё тишина — приложите скрин вкладки Network и список плагинов безопасности. Можно написать через форму на сайте (мессенджер, без звонка) или в канал t.me/DikiiTelegram. Если некогда разбираться на боевом сайте, задачу можно передать через раздел услуг — настройка WordPress и SEO-статьи. Ещё материалы по безопасности и контенту — в каталоге статей.

Материал проверен: Андрей Дикий (создаёт сайты и продвигает их статьями, SEO/GEO).
Достоверность данных: developer.wordpress.org (REST API FAQ, rest_authentication_errors, authentication handbook); wordpress.org/plugins (disable-wp-rest-api, disable-json-api, rest-api-guard, rest-api-shield, maxtdesign-rest-api-control); тред CF7 + Disable REST API; perishablepress.com (whitelist CF7); GitHub dmchale/disable-json-api и gist khromov; сверка 2026-10-03. Частотность запросов: Яндекс Вордстат, прогон 2026-10-03 (MCP недоступен, точные показы не верифицированы).

Частые вопросы

Можно ли полностью отключить REST API в WordPress?

Нет, если вы пользуетесь современной админкой и блок-редактором. Официальный FAQ предлагает ограничивать гостей через rest_authentication_errors, а не «выключатель навсегда». Полное отключение ломает то, от чего зависит панель управления.

Ломает ли блокировка REST форму заявки?

Ломает, если закрыть API для гостей без исключений. Contact Form 7 для отправки с главной страницы ходит в wp-json/contact-form-7/… — этот namespace нужно оставить в whitelist или не ставить «тотальный» плагин без настроек.

Нужен ли REST API для Gutenberg?

Да для работы редактора блоков и многих экранов админки. Поэтому схема «только гостям запрет» с is_user_logged_in() — стандарт: клиент форму отправляет, вы правите статьи в админке.

Чем REST API отличается от XML-RPC?

Это два разных служебных входа в старый и новый WordPress. XML-RPC часто отключают отдельно (pingback, старые клиенты). REST — то, что используют формы, блоки и мобильные сценарии с 4.7+. Закрывать «всё подряд» одним плагином без чтения описания рискованно.

Нужен ли JWT или REST API Guard обычному лендингу?

Для сайта услуг с формой и без мобильного приложения к вашему API обычно хватит «гостям закрыто + whitelist формы». JWT и жёсткие схемы Guard — для разработчиков и headless; не усложняйте, пока не требует задача.

Какой плагин проще: DRA или Disable WP REST API?

Disable WP REST API — один клик, но опаснее для CF7. DRA настраивается дольше, зато есть белый список — меньше шанс повторить историю с крутящейся кнопкой.

*Instagram,Facebook (принадлежит компании Meta, признанной экстремистской и запрещённой на территории РФ)
Новый маркетинг с искусственным интеллектом
Добавить комментарий