Иногда возникает необходимость ограничить доступ к странице входа в WordPress (wp-login.php) в определённые часы или дни. Это может быть полезно для повышения безопасности сайта, например, чтобы предотвратить попытки входа в нерабочее время или снизить риски автоматизированных атак в ночные часы.
Зачем ограничивать вход по времени в WordPress
Ограничение входа по времени — это дополнительный уровень защиты, который помогает:
- Снизить риск взлома в периоды низкой активности администраторов;
- Предотвратить атаки брутфорс в нерабочее время;
- Управлять доступом сотрудников или подрядчиков, которые могут заходить только в рабочие часы;
- Ограничить влияние вредоносных ботов, которые пытаются взломать сайт ночью.
Такой подход не заменяет другие методы защиты (например, двухфакторную аутентификацию), но хорошо дополняет их.
Как реализовать ограничение входа по времени на wp-login.php
Добавление кода в functions.php темы или в отдельный плагин
Ниже приведён пример функции с префиксом wplogin_, которая блокирует доступ к странице входа вне заданного временного интервала.
function wplogin_restrict_login_time() {
// Установим рабочие часы: с 8:00 до 20:00
$start_hour = 8;
$end_hour = 20;
// Получаем текущий час по часовому поясу сайта
$current_hour = (int) current_time('H');
// Проверим, если запрос на wp-login.php и время вне интервала
if (basename($_SERVER['PHP_SELF']) === 'wp-login.php') {
if ($current_hour < $start_hour || $current_hour >= $end_hour) {
wp_die('Вход в систему доступен только с 08:00 до 20:00. Пожалуйста, попробуйте позже.');
}
}
}
add_action('init', 'wplogin_restrict_login_time');Этот код проверяет, что если пользователь пытается попасть на страницу входа вне рабочего времени, то выводится сообщение об ошибке и вход блокируется.
Учет дней недели
Если нужно ограничить доступ по дням недели (например, только в будни), добавим проверку дня:
function wplogin_restrict_login_time() {
$start_hour = 8;
$end_hour = 20;
$current_hour = (int) current_time('H');
$current_weekday = (int) current_time('w'); // 0 - воскресенье, 1 - понедельник ... 6 - суббота
// Разрешаем вход только с понедельника по пятницу
$allowed_weekdays = range(1, 5);
if (basename($_SERVER['PHP_SELF']) === 'wp-login.php') {
if (!in_array($current_weekday, $allowed_weekdays) || $current_hour < $start_hour || $current_hour >= $end_hour) {
wp_die('Вход в систему возможен только в рабочие дни с 08:00 до 20:00.');
}
}
}
add_action('init', 'wplogin_restrict_login_time');Такая проверка поможет заблокировать вход в выходные дни и в нерабочее время.
Как добавить исключения для администраторов и определённых IP
Часто бывает, что нужно, чтобы администраторы могли заходить в любое время, либо с определённых IP. Для этого добавим условия:
function wplogin_restrict_login_time() {
$start_hour = 8;
$end_hour = 20;
$current_hour = (int) current_time('H');
$current_weekday = (int) current_time('w');
$allowed_weekdays = range(1, 5);
// Список разрешённых IP
$allowed_ips = ['123.45.67.89', '111.22.33.44'];
$user = wp_get_current_user();
// Проверяем IP
$user_ip = $_SERVER['REMOTE_ADDR'];
if (basename($_SERVER['PHP_SELF']) === 'wp-login.php') {
// Разрешаем администраторам и IP из белого списка вход в любое время
if (in_array('administrator', $user->roles) || in_array($user_ip, $allowed_ips)) {
return;
}
if (!in_array($current_weekday, $allowed_weekdays) || $current_hour < $start_hour || $current_hour >= $end_hour) {
wp_die('Вход в систему возможен только в рабочие дни с 08:00 до 20:00.');
}
}
}
add_action('init', 'wplogin_restrict_login_time');Такой подход сохраняет гибкость и не мешает админам или сотрудникам с доверенных IP заходить в любое время.
Использование плагинов для временного ограничения доступа
Если вы предпочитаете готовые решения, можно использовать плагины, которые позволяют добавлять временные ограничения доступа к сайту или к определённым страницам:
- Clearfy Pro – многофункциональный плагин для оптимизации и безопасности, который позволяет настраивать различные правила доступа;
- Expert Review – плагин с возможностью добавлять сложные правила проверки и ограничения;
- Плагины для ограничения доступа по IP и времени, например, WP Limit Login Attempts с дополнительными расширениями.
Однако для простой задачи ограничения входа по времени часто достаточно небольшого кода, который легко поддерживать и развивать.
Советы по тестированию и отладке
Перед внедрением на рабочем сайте обязательно протестируйте ограничения в тестовой среде. Обратите внимание на следующие пункты:
- Проверьте, что блокировка срабатывает корректно вне заданного времени и не мешает в рабочее время;
- Проверьте исключения для администраторов и IP;
- Убедитесь, что нет конфликтов с другими плагинами безопасности;
- Подумайте о возможности временного отключения ограничения через админку или добавление опции в настройки темы/плагина.
Итог
Добавление логики ограничения входа на страницу wp-login.php по времени — простой и эффективный способ повысить безопасность WordPress. Используя представленный код, вы сможете быстро внедрить гибкие правила, адаптированные под ваши требования. Для расширенных сценариев рассмотрите использование специализированных плагинов с поддержкой временных правил.