Политика паролей WordPress: как защитить сайт от логического взлома
Введение
Слабые пароли – одна из главных точек входа для логических атак на WordPress. Даже если ваш сайт защищён от DDoS и SQL‑инъекций, простой пароль админа открывает ворота злоумышленнику. В этой статье мы разберём, как построить надёжную политику паролей WordPress, автоматизировать проверку сложности, принудительно сбрасывать уязвимые учётные данные и добавить двухфакторную аутентификацию.
Проверка сложности паролей
Стандартные правила WordPress
Ядро WordPress использует функцию wp_check_password_strength(), но по умолчанию она отключена в админке. Чтобы включить её, добавьте следующий код в functions.php вашей темы или в отдельный плагин:
add_filter( 'password_strength_meter_default_options', function( $options ) { $options['min_password_strength'] = 4; // Требовать «очень сильный» пароль return $options; } ); После этого при создании или изменении пароля пользователь увидит предупреждение, если пароль не удовлетворяет требованиям.
Пользовательские правила через плагин
Для более гибкой настройки используйте фильтр validate_password_reset. Пример ниже запрещает пароли, содержащие имя пользователя, e‑mail и менее 12 символов:
add_filter( 'validate_password_reset', function( $errors, $user ) { $password = $_POST['pass1']; if ( strlen( $password ) add( 'password_too_short', __( 'Пароль должен быть не менее 12 символов.' ) ); } if ( stripos( $password, $user->user_login )!== false ) { $errors->add( 'password_contains_login', __( 'Пароль не должен содержать логин.' ) ); } if ( stripos( $password, $user->user_email )!== false ) { $errors->add( 'password_contains_email', __( 'Пароль не должен содержать e‑mail.' ) ); } return $errors; }, 10, 2 ); Сохраните файл, и новые пользователи будут обязаны выбирать более надёжные пароли.
Сброс и принудительная смена слабых паролей
WP‑CLI скрипт для обнаружения уязвимых учётных записей
Если сайт уже работает, необходимо найти и принудительно сбросить пароли, которые не отвечают новым требованиям. Делается это через WP‑CLI:
wp user list --field=ID | while read uid; do wp user meta get $uid "wp_capabilities" | grep -q "administrator" && continue wp user get $uid --field=user_pass | grep -E "^[a-zA-Z0-9]{1,8}$" && wp user update $uid --user_pass=$(openssl rand -base64 12) echo "Пользователь $uid получил новый пароль" done Скрипт ищет пароли длиной до 8 символов и заменяет их случайным 12‑символьным значением.
Плагин для массового сброса
Если вы предпочитаете GUI, установите Password Policy Manager – он сканирует всех пользователей, отмечает слабые пароли и отправляет им ссылку для сброса.
Интеграция с менеджерами паролей
Хранение секретов в .env и подключение через wp-config.php
Современные команды используют менеджеры типа 1Password, Bitwarden или Passbolt. Секретные значения сохраняются в файле .env и подхватываются в конфиге:
//.env DB_PASSWORD=super_secret_db_pass ADMIN_PASSWORD=$(op read "op://Vault/AdminPassword") // wp-config.php if ( file_exists( __DIR__. '/.env' ) ) { $dotenv = DotenvDotenv::createImmutable( __DIR__ ); $dotenv->load(); } define( 'DB_PASSWORD', $_ENV['DB_PASSWORD'] ); define( 'WP_ADMIN_PASSWORD', $_ENV['ADMIN_PASSWORD'] ); Такой подход исключает хранение паролей в открытом виде и упрощает ротацию.
Автоматический импорт в WordPress
Для массового создания пользователей из CSV, где пароли уже сгенерированы менеджером, используйте wp user import-csv. Пример команды:
wp user import-csv users.csv --fields=ID,user_login,user_email,user_pass,role Убедитесь, что колонка user_pass содержит уже хешированный пароль (используйте wp hash-password).
Двухфакторная аутентификация (2FA)
Плагины для 2FA
Самый простой способ добавить второй фактор – установить один из популярных плагинов: Wordfence Login Security, Two Factor Authentication или Loginizer. Все они поддерживают TOTP (Google Authenticator, Authy) и отправку одноразовых кодов по e‑mail/SMS.
Настройка через .htaccess (для админ‑панели)
Для дополнительного уровня защиты можно ограничить доступ к /wp-admin только с известных IP и потребовать 2FA через mod_authn_core:
AuthType Basic AuthName "Restricted Area" AuthUserFile /path/to/.htpasswd Require valid-user # Разрешаем только IP‑адреса разработчиков Require ip 203.0.113.0/24 Require valid-user Комбинация IP‑фильтра и базовой аутентификации создаёт «двойную» защиту перед входом в WordPress.
Лучшие практики и автоматизация
Cron‑задача для периодической проверки паролей
Запланируйте ежедневный скан паролей через WP‑CLI и отправляйте отчёт администратору:
0 2 * * * wp user list --field=ID --format=ids | xargs -I {} wp user meta get {} "wp_user_password" | grep -E "^[a-zA-Z0-9]{1,8}$" && echo "Слабый пароль найден" | mail -s "Отчёт по паролям" admin@example.com Мониторинг и оповещения
Подключите WAF с OWASP CRS и настройте правило 941100, которое блокирует попытки входа с паролем из списка известных утечек. В логах вы будете видеть события вида ModSecurity: Access denied with code 403 (phase 2). Match of "@rx 123456".
Заключение
Надёжная политика паролей WordPress – это сочетание строгих правил сложности, автоматического сброса уязвимых учётных записей, интеграции с менеджерами паролей и обязательной двухфакторной аутентификации. Внедряя описанные скрипты, плагины и cron‑задачи, вы значительно снижаете риск логического взлома и повышаете общую безопасность сайта.
📚 Читайте также:
❓ Часто задаваемые вопросы
Как включить проверку сложности пароля в ядре WordPress?
Добавьте фильтр password_strength_meter_default_options в functions.php и задайте min_password_strength = 4. После этого пользователь увидит предупреждение при вводе слабого пароля.
Можно ли принудительно изменить пароли всех пользователей через админ‑панель?
Да, используйте плагин Password Policy Manager, который сканирует слабые пароли и отправляет пользователям ссылки для сброса. Для массовых операций лучше применять WP‑CLI скрипт.
Нужен ли отдельный сервер для менеджера паролей?
Не обязательно. Большинство облачных решений (1Password, Bitwarden) предоставляют API, которое можно вызвать из .env файлов и подхватить в wp-config.php через библиотеку dotenv.
Как добавить 2FA только для администраторов?
Установите любой 2FA‑плагин и в его настройках укажите роль «Administrator». Плагин будет требовать одноразовый код только при входе пользователей с этой ролью.