Как скрыть логины пользователей в WordPress и закрыть их перебор (user enumeration)?
Автор: Eureka Studio · Обновлено
Коротко
WordPress показывает имена пользователей в четырёх публичных местах: в конечной точке REST /wp-json/wp/v2/users, в перенаправлениях ?author=1, в адресах архивов авторов и в стандартной карте сайта пользователей. Чтобы скрыть их, закройте список REST для вышедших из системы посетителей, остановите перебор ?author=, уберите карту сайта пользователей и сделайте сообщения об ошибках входа одинаковыми. Плагин может сделать все четыре; после этого проверьте каждое место.
Шаги
1Шаг 1
Посмотрите, что WordPress показывает сейчас
Откройте yoursite.com/wp-json/wp/v2/users, не входя в систему. На стандартной установке вы получите JSON-список, где в поле slug указан логин каждого автора.
2Шаг 2
Попробуйте перебор авторов
Теперь откройте yoursite.com/?author=1. WordPress перенаправит на /author/ваш-логин/, и имя окажется в адресной строке. Боты перебирают 1, 2, 3 и так собирают всех пользователей.
3Шаг 3
Закройте все четыре места
Откройте Hushfort → Укрепление поверхности и включите его. Оставьте включёнными «Список пользователей REST», «Перебор авторов» («Блокировать перебор ?author=1»), «Список авторов в карте сайта» и «Сведения об авторе в oEmbed», затем сохраните.
4Шаг 4
Проверьте ещё раз в приватном окне
Повторите те же запросы, не входя в систему. Теперь список пользователей отвечает «rest_no_route» с кодом 404, а ?author=1 больше не перенаправляет на логин.
Почему это важно
Чтобы скрыть логины пользователей WordPress, закройте четыре публичных места, где они видны: /wp-json/wp/v2/users, перенаправления ?author=1, адреса архивов авторов и стандартную карту сайта пользователей. Заодно сделайте сообщения об ошибке входа одинаковыми и проверьте каждое место снаружи.
Чтобы войти, злоумышленнику нужны две вещи: имя пользователя и пароль. WordPress «из коробки» отдаёт первую половину. Это не ошибка: у каждого из этих мест есть своя причина (данные для приложений, красивые адреса авторов, поисковые системы). Но вместе они позволяют любому боту за секунды составить список всех логинов на вашем сайте.
Скрытие имён пользователей не делает слабый пароль безопасным. Зато оно убирает лёгкую половину головоломки: каждая попытка должна угадать и имя, и пароль. В паре с лимитами входа и двухфакторной аутентификацией подбор из медленного превращается в безнадёжный.
Четыре места, где WordPress публикует имена пользователей:
- REST API —
/wp-json/wp/v2/usersперечисляет авторов с их ярлыком (slug), который обычно совпадает с логином. - Перебор авторов —
/?author=1перенаправляет на/author/login-name/. - Архивы авторов — сам адрес архива содержит ярлык автора.
- Стандартная карта сайта —
/wp-sitemap-users-1.xmlперечисляет адреса архивов авторов. Ответы oEmbed тоже могут содержать сведения об авторе.
Частые ошибки
- Закрыть одно место и считать дело сделанным. Если закрыть
?author=, а список REST оставить открытым, для бота ничего не изменится. Проверьте все четыре. - Отображаемое имя совпадает с логином. Даже когда все утечки закрыты, тема, которая выводит «Опубликовано: admin», выдаёт имя. Задайте другое отображаемое имя в разделе Пользователи → Профиль.
- Сломать настоящие страницы авторов. На блоге с несколькими авторами архивы авторов полезны. Блокируйте перебор номеров, а не сами архивы.
- Подробные ошибки входа. «Введённый вами пароль пользователя jane неверен» подтверждает, что такое имя существует. Используйте одно сообщение для обоих случаев.
Без плагина
Большую часть можно закрыть must-use плагином (wp-content/mu-plugins/hide-users.php):
<?php
// 1. REST user list: logged-out visitors get nothing.
add_filter( 'rest_endpoints', function ( $endpoints ) {
if ( ! is_user_logged_in() ) {
unset( $endpoints['/wp/v2/users'], $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
}
return $endpoints;
} );
// 2. ?author=N scans: stop the redirect that reveals the name.
add_action( 'template_redirect', function () {
if ( isset( $_GET['author'] ) && ! is_admin() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );
// 3. Core sitemap: drop the users provider.
add_filter( 'wp_sitemaps_add_provider', function ( $provider, $name ) {
return 'users' === $name ? false : $provider;
}, 10, 2 );
// 4. Same message for wrong username and wrong password.
add_filter( 'login_errors', function () {
return 'The username or password is incorrect.';
} );
Оговорки: сначала проверьте код на тестовом сайте, потому что темы и плагины иногда читают список пользователей REST. Ярлык автора в адресах архивов этот код не меняет; для этого измените nicename каждого автора или используйте плагин для отображаемых имён. И это ещё один файл, о котором нужно помнить при переносе или пересборке сайта.
Если что-то пошло не так
- Интеграция потеряла список авторов. Некоторые внешние инструменты читают
/wp/v2/usersбез входа. Выдайте им пароль приложения, чтобы они проходили аутентификацию, или снова откройте список. - Страницы авторов отдают 404. Вы выбрали полное отключение архивов авторов. Переключитесь на вариант, который блокирует только перебор номеров.
- SEO-плагин по-прежнему перечисляет авторов. Многие SEO-плагины создают собственную карту сайта авторов. Отключите её и в этом плагине.
С Hushfort
«Защита имён пользователей» входит в Hushfort Pro — платное дополнение к Hushfort Security, бесплатному плагину безопасности для WordPress. «Сканирование поверхности», которое показывает, что ещё утекает, есть в бесплатном плагине.
Защита имён пользователей — часть уровня «Укрепление поверхности» в Hushfort — закрывает все четыре места на одном экране:
- закрывает список REST
/wp/v2/usersдля посетителей, не вошедших в систему, - блокирует перебор
?author=N, сохраняя архивы/author/name/(или полностью отключает архивы, если вам так удобнее), - убирает стандартную карту сайта пользователей и сведения об авторе из ответов oEmbed,
- делает сообщения об ошибках входа одинаковыми для неверного имени и неверного пароля.
Затем Сканирование поверхности проверяет каждое место реальными запросами и называет любое имя пользователя, которое всё ещё утекает.
Частые вопросы
Что такое перебор пользователей в WordPress?
Опасно ли, что моё имя пользователя видно?
Не сломает ли закрытие списка пользователей REST редактор?
Можно ли оставить страницы архивов авторов?
Почему важны сообщения об ошибках входа?
Похожие инструкции
Как проверить, что мой сайт на WordPress открывает посторонним?
Проверка безопасности сайта на WordPress глазами бота: пять запросов покажут, открыты ли вход, XML-RPC и имена пользователей, и как закрыть найденное.
Смотреть шагиЧто такое xmlrpc.php и как отключить XML-RPC в WordPress?
xmlrpc.php — вторая дверь для входа в WordPress, которую скрытый адрес входа не закрывает. Как отключить XML-RPC, сохранить пингбэки и проверить результат.
Смотреть шагиКак ограничить попытки входа в WordPress и защититься от брутфорса?
Защита WordPress от брутфорса: блокировка IP после нескольких неудачных попыток входа. Рабочие настройки, код без плагина и лазейки, которые надо закрыть.
Смотреть шаги



