WebAuthn в WordPress: настройка входа без пароля и биометрия
Введение
Парольные атаки остаются одной из самых распространённых угроз для сайтов на WordPress. Технология WebAuthn (Web Authentication) позволяет полностью избавиться от паролей, заменив их криптографическими ключами, биометрией или аппаратными токенами. В этой статье мы разберём, как внедрить WebAuthn в WordPress, какие плагины подходят для быстрой интеграции и как написать собственный код, если готового решения недостаточно.
Что такое WebAuthn и как он работает
Принцип password‑less аутентификации
WebAuthn – часть стандарта FIDO2, который использует пару публичный/приватный ключ. При регистрации пользователь генерирует приватный ключ на своём устройстве (смартфон, USB‑токен, YubiKey) и отправляет серверу только публичный ключ. При входе браузер подписывает случайный челлендж приватным ключом, а сервер проверяет подпись публичным ключом.
Типы аутентификаторов
- Биометрические (сканер отпечатков, Face ID)
- Аппаратные USB/ NFC‑токены
- Встроенные в операционную систему (Windows Hello, Apple Passkey)
Подготовка WordPress к работе с WebAuthn
Обновления и совместимость
Убедитесь, что ваш WordPress работает на версии 5.8 и выше, а PHP – минимум 7.4. Современные браузеры (Chrome 67+, Firefox 60+, Edge 18+, Safari 13+) уже поддерживают WebAuthn без дополнительных полифиллов.
Выбор плагина
Для большинства сайтов достаточно готового решения. Среди популярных плагинов:
- «Passwordless Login» – простой интерфейс, поддержка YubiKey и Face ID.
- «WP WebAuthn» – расширенные настройки ролей и возможность привязки нескольких ключей.
- «Ultimate Member» в комбинации с модулем WebAuthn – если нужен профильный функционал.
Помимо плагинов, полезно ознакомиться с материалом о SQL‑инъекциях и продвинутой защите WordPress, чтобы понимать, как правильно хранить публичные ключи в базе без уязвимостей.
Настройка плагина WebAuthn
Базовая конфигурация
- Установите и активируйте выбранный плагин через «Плагины → Добавить новый».
- Перейдите в настройки плагина (обычно «Настройки → WebAuthn»).
- Выберите типы аутентификаторов, которые будут разрешены для ваших пользователей.
- Настройте страницу входа: замените стандартную форму на кнопку «Войти с помощью WebAuthn».
- Сохраните изменения и проверьте работу в режиме инкогнито.
Дополнительные параметры безопасности
- Включите обязательную двухфакторную аутентификацию для администраторов.
- Ограничьте количество попыток регистрации ключа (защита от перебора).
- Регулярно проверяйте журнал аутентификаций – многие плагины интегрируются с системой защиты от Drive‑by download.
Кастомная реализация WebAuthn
Регистрация публичного ключа
Если готовый плагин не покрывает ваш сценарий, можно реализовать собственный эндпоинт. Ниже – минимальный пример регистрации через REST‑API.
add_action( 'rest_api_init', function () { register_rest_route( 'webauthn/v1', '/register', array( 'methods' => 'POST', 'callback' => 'my_webauthn_register', 'permission_callback' => function(){ return is_user_logged_in(); }, ) ); }); function my_webauthn_register( WP_REST_Request $request ) { $data = $request->get_json_params(); // $data['id'], $data['publicKey'], $data['type'] – получаем от браузера $user_id = get_current_user_id(); update_user_meta( $user_id, 'webauthn_key', $data ); return new WP_REST_Response( ['status'=> 'ok'], 200 ); } Аутентификация пользователя
Для входа необходимо проверить подпись, полученную от клиентского устройства. В PHP используем функцию openssl_verify:
$signature = base64_decode( $request['signature'] ); $challenge = base64_decode( $request['challenge'] ); $publicKey = $stored_key['publicKey']; $verified = openssl_verify( $challenge, $signature, $publicKey, OPENSSL_ALGO_SHA256 ); if ( $verified === 1 ) { // Авторизуем пользователя wp_set_current_user( $user_id ); wp_set_auth_cookie( $user_id ); return new WP_REST_Response( ['logged_in'=>true], 200 ); } Не забудьте хранить публичный ключ в виде PEM‑формата и использовать безопасный способ сериализации.
Тестирование и отладка
После внедрения проведите комплексную проверку:
- Регистрация ключа на разных устройствах (мобильный, десктоп, USB‑токен).
- Проверка отказа при изменении челленджа – убедитесь, что подпись не проходит.
- Аудит журналов входов через
wp_login_failedи собственный лог‑хендлер. - Тесты нагрузки: при медленном соединении (например, 3G) WebAuthn всё равно работает быстро. Подробнее о оптимизации под 3G.
Если возникнут проблемы с совместимостью браузеров, проверьте консоль разработчика: ошибки вида «InvalidStateError: The operation is insecure» часто указывают на отсутствие HTTPS.
Заключение
WebAuthn предоставляет надёжную замену паролям, повышая безопасность WordPress‑сайтов без ухудшения пользовательского опыта. Выбор готового плагина подходит большинству администраторов, а кастомная реализация позволяет интегрировать аутентификацию в любые бизнес‑процессы. Не забывайте о регулярных обновлениях, мониторинге журналов и совместимости с другими модулями безопасности, чтобы ваш «пароль‑less» сайт оставался надёжным и удобным.
📚 Читайте также:
❓ Часто задаваемые вопросы
Нужен ли специальный сервер для WebAuthn?
Нет. WebAuthn работает полностью на стороне браузера и сервера WordPress, используя стандартные HTTPS‑запросы и базу данных для хранения публичных ключей.
Можно ли использовать WebAuthn совместно с обычным паролем?
Да. Большинство плагинов позволяют включить двойную аутентификацию: пользователь вводит пароль, а затем подтверждает вход через WebAuthn‑ключ.
Какие устройства поддерживают WebAuthn?
Практически любые современные смартфоны, ноутбуки и отдельные USB‑токены (YubiKey, SoloKeys, Feitian). Поддержка зависит от браузера и операционной системы.