На живом WordPress часто остаются открытыми вещи, которые не нужны для обычной работы сайта: индексируемые каталоги, служебные файлы, лишние точки входа к API и стандартные ответы сервера, по которым удобно сканировать установку. Если задача не в «усилить безопасность вообще», а в том, чтобы убрать конкретные лишние поверхности атаки и не сломать админку, лучше идти по чек-листу: сначала диагностика, потом точечное закрытие, потом проверка.
Что именно стоит проверить в первую очередь
Под «открытыми XML-доступами и каталогами» обычно имеют в виду не один механизм, а несколько разных вещей:
xmlrpc.php, если он не нужен для Jetpack, мобильного приложения или внешней публикации;- листинг директорий на сервере, когда вместо ошибки браузер показывает содержимое папки;
- служебные XML-файлы и карты сайта, которые должны быть доступны, но не должны дублироваться или отдаваться с неправильными заголовками;
- публичные каталоги плагинов, тем и загрузок, если сервер отдает их как обычные папки без ограничений.
Важно не смешивать эти вещи. Отключение xmlrpc.php не решает проблему листинга директорий, а запрет индексации папки не защищает от обращения к файлу по прямому URL.
Диагностика: что реально открыто
Перед правками проверьте сайт снаружи. Это быстрее, чем гадать по настройкам хостинга. Минимальный набор проверок можно сделать вручную или через curl.
Проверка XML-RPC
Если открыть /xmlrpc.php в браузере, нормальный ответ WordPress обычно выглядит как сообщение о том, что сервис принимает только POST-запросы. Это не ошибка, а признак того, что файл существует и доступен извне. Для проверки заголовков подойдет:
curl -I https://example.com/xmlrpc.phpЕсли вы не используете XML-RPC, сам факт доступности файла уже лишний. Но если у вас подключен Jetpack или старое мобильное приложение WordPress, сначала убедитесь, что они не завязаны на этот канал.
Проверка листинга директорий
Откройте в браузере несколько типичных папок:
/wp-content/uploads//wp-content/plugins//wp-content/themes/
Если вместо запрета или пустой страницы вы видите список файлов, у сервера включен directory listing. Это уже не вопрос WordPress, а настройка веб-сервера.
Проверка служебных XML-файлов
Карта сайта и RSS-ленты должны быть доступны, если вы их используете. Но иногда после установки SEO-плагина остаются старые URL, которые отдают дубли или редиректы через цепочку. Проверьте, что:
- основная карта сайта открывается без 404;
- старые адреса карт сайта не висят в индексе;
- нет двух разных sitemap-решений одновременно.
Пошаговое решение
Ниже — безопасная последовательность. Она подходит для большинства обычных сайтов на WordPress, если у вас есть доступ к файлам и к панели хостинга.
1. Закройте листинг директорий на уровне сервера
Для Apache в корне сайта или в конфигурации виртуального хоста должен быть отключен просмотр содержимого папок. Если у вас есть доступ только к .htaccess, добавьте:
Options -IndexesЭто не ломает сайт. При попытке открыть папку сервер будет отдавать ошибку вместо списка файлов. Если хостинг использует Nginx, аналогичная настройка делается в конфиге сервера, а не в .htaccess.
2. Ограничьте доступ к xmlrpc.php, если он не нужен
Самый простой способ — запретить прямой доступ к файлу на уровне веб-сервера. Для Apache можно добавить правило в .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>Если у вас старая версия Apache 2.2, синтаксис будет другим:
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>Для Nginx блокировка делается в конфигурации сайта:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}Если XML-RPC нужен частично, не закрывайте его вслепую. Лучше сначала понять, кто именно его использует, и только потом решать, отключать полностью или ограничивать.
3. Уберите лишние публичные каталоги из индексации
Если папка должна быть доступна по прямому URL, но не должна попадать в поиск, используйте не запрет доступа, а noindex через HTTP-заголовок или мета-тег на уровне страниц. Для статических директорий это обычно решается через X-Robots-Tag на уровне сервера, но в WordPress чаще достаточно не создавать в этих папках индексируемых HTML-страниц.
Если речь о папке с файлами, которые не должны быть доступны вообще, правильнее закрыть ее через серверную конфигурацию или вынести файлы за пределы веб-корня.
4. Проверьте права на файлы и папки
Слишком широкие права часто приводят к тому, что сервер отдает содержимое или позволяет лишнее. Для типичной установки WordPress ориентируйтесь на аккуратные права, а не на 777. Обычно достаточно:
- папки —
755; - файлы —
644; wp-config.php— более строгие права, если хостинг это поддерживает.
Это не магическая защита, но она убирает часть проблем, которые появляются из-за неаккуратной миграции или ручной загрузки файлов.
Когда лучше использовать плагин, а когда — код
Если задача только в отключении XML-RPC и чистке служебных поверхностей, можно обойтись кодом. Плагин имеет смысл, когда нужно управлять несколькими настройками сразу: скрыть лишние элементы, убрать дубли, отключить XML-RPC, почистить head и не трогать серверную конфигурацию вручную. В таких случаях удобно смотреть в сторону решений класса Clearfy Pro, если нужен именно набор технических настроек, а не один узкий фикс.
| Подход | Что закрывает | Плюс | Минус |
|---|---|---|---|
Код в .htaccess / конфиге Nginx | Листинг директорий, xmlrpc.php | Быстро и прозрачно | Нужен доступ к серверу |
| Плагин безопасности | Часть ограничений и логика исключений | Удобно без правок сервера | Лишняя зависимость от плагина |
| Комбинированный подход | Сервер + WordPress | Лучше контроль | Нужно аккуратно не задвоить правила |
Проверка результата после внедрения
После правок не ограничивайтесь тем, что «сайт открылся». Проверьте конкретные сценарии.
- Откройте
/xmlrpc.php— если он отключен, должен быть отказ в доступе или 403. - Откройте несколько папок сайта — листинг не должен показываться.
- Проверьте вход в админку, создание записей и загрузку медиа.
- Если используете Jetpack, внешние интеграции или мобильное приложение, убедитесь, что они не потеряли связь.
- Посмотрите логи веб-сервера: нет ли всплеска 403/404 после изменений.
Для быстрой проверки заголовков подойдет:
curl -I https://example.com/
curl -I https://example.com/xmlrpc.php
curl -I https://example.com/wp-content/uploads/Если xmlrpc.php возвращает 403, а сайт и админка работают как раньше, базовая задача выполнена. Если вместо 403 вы видите 200, правило не применилось или его перебивает другой уровень конфигурации.
Частые ошибки и как их исправить
Закрыли XML-RPC и сломали нужный сервис
Так бывает, если не проверили зависимости. Решение простое: временно вернуть доступ, понять источник запросов и либо оставить XML-RPC включенным, либо заменить интеграцию на другой способ связи.
Добавили правило в .htaccess, но оно не сработало
Причина обычно в том, что сайт работает на Nginx, а не на Apache, или конфиг перезаписывается плагином кеша. В этом случае правило нужно переносить в правильный слой конфигурации.
Отключили листинг директорий, но файлы все равно доступны
Это нормально: Options -Indexes только убирает просмотр содержимого папки. Если файл лежит в публичной директории, его можно открыть по прямой ссылке. Для закрытия доступа нужен отдельный запрет или перенос файла.
Поставили слишком широкую блокировку и получили 500
Чаще всего это синтаксическая ошибка в .htaccess или несовместимый директивный блок для версии Apache. Всегда проверяйте конфиг на тестовом окружении или хотя бы сохраняйте копию файла перед изменениями.
Практические советы по безопасности и производительности
Не закрывайте все подряд только ради «жесткости». Чем больше точечных запретов, тем выше шанс случайно сломать обновление, интеграцию или кэш. Лучше придерживаться нескольких правил:
- не трогайте рабочие XML-каналы, пока не проверили зависимости;
- не используйте плагины, которые дублируют серверные ограничения без необходимости;
- не храните чувствительные файлы в публичных папках;
- после правок очищайте кеш страницы и кеш CDN, если он есть;
- фиксируйте изменения в репозитории или хотя бы в заметке для команды, чтобы не потерять причину блокировки.
Если у вас уже есть набор технических задач по WordPress — убрать дубли, подчистить служебные элементы, отключить лишнее в head и не лезть каждый раз в код руками — имеет смысл смотреть на инструменты, которые закрывают именно этот класс проблем. Но в любом случае сначала определите, что именно открыто, а потом уже выбирайте способ закрытия.