Почему стоит изменить URL входа в админку WordPress
По умолчанию URL для входа в административную панель WordPress — /wp-admin или /wp-login.php. Это хорошо известно злоумышленникам, и именно на эти адреса часто направляются атаки методом перебора паролей (brute force). Изменение URL входа поможет снизить риски автоматизированных атак, уменьшит нагрузку на сервер и повысит безопасность сайта.
Хотя существует множество плагинов, которые позволяют легко изменить адрес входа, иногда установка дополнительных плагинов нежелательна из-за производительности или политики проекта. В этом руководстве мы рассмотрим, как сделать это без плагинов, используя собственные функции и настройки.
Как работает стандартный вход в WordPress
Страница входа в WordPress — wp-login.php. При обращении к ней можно авторизоваться, выйти из системы, восстановить пароль и так далее. Для защиты изменения URL нужно перенаправлять запросы с нового адреса на обработчик входа и блокировать прямой доступ к wp-login.php.
Ниже мы рассмотрим, как организовать это с помощью файла functions.php вашей темы или собственного простого плагина.
Создаем собственный URL для входа
1. Добавляем rewrite правило для нового URL
Для начала добавим правило перезаписи URL, чтобы WordPress понимал новый адрес для входа, например /secure-login.
function wpdir_add_login_rewrite_rule() {
add_rewrite_rule('^secure-login/?$', 'wp-login.php', 'top');
}
add_action('init', 'wpdir_add_login_rewrite_rule');После добавления этого кода нужно обновить правила перезаписи. Для этого зайдите в админке WordPress в Настройки > Постоянные ссылки и нажмите кнопку «Сохранить изменения» без изменения настроек. Это сбросит и обновит правила.
2. Перенаправляем старый URL wp-login.php
Чтобы защититься от доступа к стандартному адресу wp-login.php, добавим фильтр, который будет блокировать или перенаправлять пользователей, которые пытаются попасть по старому адресу.
function wpdir_block_wp_login() {
$request_uri = $_SERVER['REQUEST_URI'];
if (strpos($request_uri, 'wp-login.php') !== false && !is_user_logged_in()) {
wp_redirect(site_url('/secure-login'));
exit;
}
}
add_action('init', 'wpdir_block_wp_login');Этот код перенаправит всех неавторизованных пользователей с wp-login.php на новую страницу входа /secure-login.
Дополнительные меры безопасности
Ограничение доступа по IP
Для повышения безопасности можно ограничить доступ к странице входа по IP. Добавьте в functions.php следующий код:
function wpdir_limit_login_by_ip() {
$allowed_ips = ['123.456.789.0', '111.222.333.444']; // Замените на свои IP
if (strpos($_SERVER['REQUEST_URI'], 'secure-login') !== false && !in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
wp_die('Доступ запрещён');
}
}
add_action('init', 'wpdir_limit_login_by_ip');Таким образом, только указанные IP смогут попасть на страницу логина.
Защита от перебора паролей
Без плагинов можно реализовать простейшую защиту, например, ограничение количества попыток входа сессией или куками. Но для более надежной защиты рекомендуем использовать специализированные плагины, например, Clearfy Pro, который умеет блокировать brute force атаки.
Пример простого собственного обработчика входа
Если хотите полностью контролировать процесс входа, можно создать страницу с формой и логикой авторизации. Пример простой формы:
function wpdir_login_form_shortcode() {
if (is_user_logged_in()) {
return 'Вы уже авторизованы.';
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['wpdir_login_nonce'])) {
if (!wp_verify_nonce($_POST['wpdir_login_nonce'], 'wpdir_login_form')) {
return 'Ошибка безопасности.';
}
$creds = [
'user_login' => $_POST['log'],
'user_password' => $_POST['pwd'],
'remember' => isset($_POST['remember']) ? true : false
];
$user = wp_signon($creds, false);
if (is_wp_error($user)) {
return 'Неверный логин или пароль.';
} else {
wp_redirect(admin_url());
exit;
}
}
ob_start();
?>
<form method="post">
<p><label>Логин<br><input type="text" name="log" required></label></p>
<p><label>Пароль<br><input type="password" name="pwd" required></label></p>
<p><label><input type="checkbox" name="remember"> Запомнить меня</label></p>
<?php wp_nonce_field('wpdir_login_form', 'wpdir_login_nonce'); ?>
<p><input type="submit" value="Войти"></p>
</form>
<?php
return ob_get_clean();
}
add_shortcode('wpdir_login_form', 'wpdir_login_form_shortcode');Создайте страницу с шорткодом [wpdir_login_form] и используйте ее как альтернативную страницу входа.
Подводим итоги и рекомендации
Изменение URL входа в админку WordPress без плагинов возможно, но требует аккуратного подхода и тестирования. Обязательно делайте резервные копии перед внесением изменений и проверяйте работу сайта после обновления правил перезаписи.
Если нужна более комплексная защита и удобство, рассмотрите плагины типа Clearfy Pro или WPCommunity, которые позволяют не только изменить URL входа, но и добавить множество других функций безопасности и оптимизации.