User enumeration защита WordPress: 7 методов скрытия пользователей
Введение
Enumeration (перебор) — один из самых популярных векторов атаки на WordPress. Злоумышленники с помощью простых запросов получают список логинов, имена пользователей и даже идентификаторы авторов. Получив такую информацию, они могут подобрать пароли или воспользоваться социальным инжинирингом. В этой статье мы разберём семь практических методов, которые помогут скрыть пользователей, изменить публичные URL авторов, ограничить доступ к REST API и подобрать надёжные плагины.
Если вы интересуетесь общей оптимизацией WordPress, советуем также посмотреть материал о том, как ускорить WordPress на Mac. Быстрая работа сайта снижает нагрузку и делает перебор менее привлекательным для атакующего.
1. Почему enumeration работает
WordPress по умолчанию раскрывает информацию о пользователях через несколько точек:
- URL вида
/?author=1перенаправляет на профиль автора; - REST API эндпоинт
/wp-json/wp/v2/usersвозвращает массив пользователей, если запрос выполнен от имени неавторизованного пользователя; - HTML‑страницы авторов, где в атрибуте
authorуказывается ID.
Эти «утечки» позволяют собрать базу логинов за несколько секунд.
2. Скрытие списка пользователей через.htaccess
Самый простой способ — закрыть доступ к файлу author и к REST‑эндпоинту для неавторизованных запросов. Добавьте в корень сайта файл .htaccess со следующими правилами:
# Запретить прямой доступ к author‑URL RewriteEngine On RewriteCond %{QUERY_STRING} ^author=([0-9]+)$ RewriteRule ^$ - [F,L] # Отключить публичный доступ к REST API /users <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} ^/wp-json/wp/v2/users RewriteCond %{HTTP:Authorization} ^$ [OR] RewriteCond %{REQUEST_METHOD} ^(GET|POST)$ RewriteRule ^ - [R=403,L] </IfModule> Эти правила возвращают статус 403, если запрос идёт без авторизации, тем самым скрывая список пользователей.
3. Изменение URL авторов
WordPress генерирует «человекочитаемые» URL вида /author/username/. Можно изменить структуру, используя фильтр author_link в файле functions.php темы:
add_filter( 'author_link', function( $link, $author_id, $author_nicename ) { // Пример: заменяем /author/ на /profile/ return home_url( '/profile/'. $author_nicename. '/' ); }, 10, 3 ); После этого запросы /author/ вернут 404, а реальные профили будут доступны только по новому пути. Не забудьте добавить правило в .htaccess для перенаправления старых ссылок, если нужны 301‑редиректы.
4. Ограничение доступа к REST API
REST API — мощный инструмент, но открытый доступ к эндпоинту /wp/v2/users часто используется в атаках. Самый надёжный способ — отключить его полностью для неавторизованных запросов через фильтр rest_authentication_errors:
add_filter( 'rest_authentication_errors', function( $result ) { if (! empty( $result ) ) { return $result; // Уже есть ошибка авторизации } if (! is_user_logged_in() ) { // Блокируем доступ к пользовательским данным $route = trim( $_SERVER['REQUEST_URI'], '/' ); if ( strpos( $route, 'wp/v2/users' )!== false ) { return new WP_Error( 'rest_forbidden', 'Доступ к пользователям запрещён.', array( 'status' => 403 ) ); } } return $result; }); Если вам нужен доступ к API только из собственного приложения, можно добавить проверку по заголовку Authorization или по IP‑адресу. Подробный пример настройки API‑gateway для WordPress, включая Kong и Traefik, описан в статье API Gateway для WordPress.
5. Лучшие плагины и практики 2026 года
Плагины позволяют быстро внедрить защиту без правки кода. На 2026 год наиболее популярны:
- Wordfence Security — имеет встроенный модуль «Hide WordPress version and author information».
- iThemes Security Pro — опция «Disable REST API for non‑logged‑in users».
- Shield Security — позволяет менять slug автора через UI.
Все перечисленные плагины совместимы с последними версиями WordPress и регулярно обновляются. Подробнее о защите от фишинга и подборе плагинов читайте в статье Фишинг защита WordPress.
6. Тестирование и мониторинг
После внедрения мер необходимо убедиться, что enumeration действительно отключён. Самый простой способ — выполнить запросы с помощью cURL:
// Проверка author URL curl -I "https://example.com/?author=1" // Проверка REST API curl -I "https://example.com/wp-json/wp/v2/users" Ожидаемый ответ — статус 403 или 404. Для постоянного мониторинга рекомендуется включить логирование в wp-config.php:
define( 'WP_DEBUG_LOG', true ); Записи о попытках доступа к закрытым эндпоинтам появятся в файле wp-content/debug.log. При необходимости интегрируйте их с внешними SIEM‑системами.
Заключение
Enumeration‑атаки — простые, но потенциально опасные запросы. Сочетая серверные правила (.htaccess), изменения в теме, ограничения REST API и проверенные плагины, вы полностью скрываете список пользователей от посторонних глаз. Регулярно проверяйте эффективность защиты и обновляйте плагины, чтобы оставаться на шаг впереди злоумышленников.
📚 Читайте также:
❓ Часто задаваемые вопросы
Как полностью отключить вывод списка пользователей через REST API?
Добавьте фильтр rest_authentication_errors в functions.php, который проверяет статус входа и, если пользователь не авторизован, возвращает ошибку 403 для маршрута /wp/v2/users.
Можно ли скрыть URL авторов без изменения кода темы?
Да, многие плагины (например, iThemes Security) позволяют изменить slug автора через настройки, но кастомный код в functions.php даёт более гибкий контроль.
Влияет ли закрытие <code>author=ID</code> на SEO?
Нет, если вы правильно настроите 301‑редиректы со старых URL на новые профили, поисковые боты получат актуальную структуру без потери индексации.
Какие инструменты использовать для автоматического тестирования enumeration?
Можно применять сканеры вроде WPScan или curl‑скрипты, а также настроить мониторинг логов в debug.log и отправлять оповещения через сервисы типа Sentry.