В стандартной установке WordPress страница входа доступна по адресу /wp-login.php или /wp-admin. Однако, часто возникает необходимость создать кастомную страницу входа для улучшения пользовательского опыта, стилистики сайта и повышения безопасности. В этой статье подробно рассмотрим, как сделать собственную страницу входа с помощью кода и плагинов, а также как решить распространённые проблемы безопасности, связанные с авторизацией.
Почему нужна кастомная страница входа в WordPress
Стандартная страница входа выглядит одинаково на большинстве сайтов и легко узнаваема злоумышленниками. Некоторые причины для создания своей страницы входа:
- Уникальный дизайн, соответствующий стилю сайта.
- Улучшение UX: добавить логотип, инструкции, CAPTCHA.
- Скрыть стандартный URL
/wp-login.phpдля повышения безопасности. - Добавить дополнительные проверки и защиту от брутфорса.
Рассмотрим несколько способов реализации.
Создание кастомной страницы входа вручную (код)
Для начала создадим кастомный шаблон страницы с формой входа. Это позволит полностью контролировать внешний вид и логику.
1. Создание шаблона страницы входа
Создайте файл page-login.php в теме:
<?php
/*
Template Name: Custom Login
*/
get_header();
// Проверяем отправку формы
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$creds = [];
$creds['user_login'] = $_POST['log'] ?? '';
$creds['user_password'] = $_POST['pwd'] ?? '';
$creds['remember'] = isset($_POST['rememberme']);
$user = wp_signon($creds, false);
if (is_wp_error($user)) {
echo '<p style="color:red;">' . esc_html($user->get_error_message()) . '</p>';
} else {
wp_redirect(home_url());
exit;
}
}
?>
<form method="post" action="">
<p><label for="log">Логин</label><br><input type="text" name="log" id="log" required /></p>
<p><label for="pwd">Пароль</label><br><input type="password" name="pwd" id="pwd" required /></p>
<p><input type="checkbox" name="rememberme" id="rememberme" /><label for="rememberme">Запомнить меня</label></p>
<p><input type="submit" value="Войти" /></p>
</form>
<?php get_footer(); ?>
Этот шаблон можно применить к странице в админке. Форма обрабатывает вход с помощью функции wp_signon().
2. Перенаправление с /wp-login.php на кастомную страницу
Чтобы скрыть стандартный URL, добавим редирект:
add_action('login_init', function() {
$login_page = home_url('/login/'); // URL вашей страницы с шаблоном
$current_url = (isset($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : '';
if (strpos($current_url, 'wp-login.php') !== false && !isset($_POST['wp-submit'])) {
wp_redirect($login_page);
exit;
}
});
Добавьте этот код в functions.php вашей темы или в отдельный плагин.
Использование плагинов для кастомизации страницы входа
Если хочется быстро и без кода, можно использовать плагины. Вот несколько популярных решений:
- WPS Hide Login — меняет URL страницы входа. Очень лёгкий и эффективный инструмент. Подробнее на WPSHOP
- Custom Login Page Customizer — позволяет менять дизайн страницы через «Внешний вид» → «Настроить».
- LoginPress — мощный конструктор страниц входа с визуальным редактором и поддержкой Google reCAPTCHA.
Комбинируйте плагин для смены URL (например, WPS Hide Login) и плагин для визуального оформления, чтобы получить идеальный вариант.
Повышение безопасности страницы входа
Кастомная страница входа — не только про дизайн, но и про защиту.
1. Ограничение количества попыток входа
Для борьбы с подбором пароля используйте плагин Limit Login Attempts Reloaded или пишите свой код с использованием wp_authenticate_user и ведением счётчика.
2. Защита от CSRF
Добавьте nonce в форму входа и проверяйте его на стороне сервера:
// Добавить nonce в форму
<input type="hidden" name="custom_login_nonce" value="<?php echo wp_create_nonce('custom-login-nonce'); ?>" />
// Проверка перед авторизацией
if (!isset($_POST['custom_login_nonce']) || !wp_verify_nonce($_POST['custom_login_nonce'], 'custom-login-nonce')) {
wp_die('Ошибка безопасности. Попробуйте снова.');
}
3. Двухфакторная аутентификация
Используйте плагины, например, Two Factor или Google Authenticator для добавления второго шага верификации.
Пример кастомной функции входа с проверкой nonce и редиректом — 2wp.ru
function 2wp_custom_login_process() {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['custom_login_nonce']) || !wp_verify_nonce($_POST['custom_login_nonce'], 'custom-login-nonce')) {
wp_die('Ошибка безопасности.');
}
$creds = [];
$creds['user_login'] = sanitize_text_field($_POST['log'] ?? '');
$creds['user_password'] = $_POST['pwd'] ?? '';
$creds['remember'] = isset($_POST['rememberme']);
$user = wp_signon($creds, false);
if (is_wp_error($user)) {
echo '<p style="color:red;">' . esc_html($user->get_error_message()) . '</p>';
} else {
wp_redirect(home_url('/dashboard/'));
exit;
}
}
}
Вызовите эту функцию в шаблоне страницы входа перед формой.
Выводы и рекомендации по кастомизации входа
Создание собственной страницы входа — отличный способ улучшить UX и защитить сайт от атак. Рекомендуется комбинировать несколько подходов:
- Создавать кастомный шаблон с проверками nonce и обработкой ошибок.
- Использовать плагин WPS Hide Login для смены URL страницы входа Подробнее.
- Добавлять защиту от брутфорса и двухфакторную аутентификацию.
- Стилизовать форму через CSS или использовать специализированные плагины.
Так вы получите безопасный, удобный и уникальный механизм авторизации для вашего WordPress-сайта.