Ось як ви можете налаштувати двофакторну аутентифікацію на WordPress без плагіна

pic

Давайте пройдемося по цьому коду крок за кроком. Він додає систему двофакторної аутентифікації (2FA) до входу в WordPress. Подумайте про це як про подвійний контроль безпеки — спочатку ваш пароль, потім код, надісланий на електронну пошту адміністратора. Ось як це працює:

Все, що вам потрібно зробити, це скопіювати та вставити цей фрагмент у файл functions.php. Але обов'язково створіть дочірню тему перед тим, щоб оновлення теми не впливало на цей код.

Не хочете додавати цей фрагмент у файл functions.php? Не хвилюйтеся, просто встановіть плагін WPCode і додайте цей PHP фрагмент та активуйте його.

Я вже протестував цей код на своєму тестовому проекті, і він працює чудово.

// Крок 1: Перехоплення процесу входу та перенаправлення на сторінку 2FA  
function custom_2fa_login_redirect($user, $password) {  
 if (is_wp_error($user)) {  
 return $user;  
 }  

 // Генерація випадкового 6-значного коду  
 $two_fa_code = wp_rand(100000, 999999);  
 update_user_meta($user->ID, '2fa_code', $two_fa_code);  
 update_user_meta($user->ID, '2fa_code_time', time());  

 // Отримання електронної пошти адміністратора  
 $admin_email = get_option('admin_email');  

 // Відправка коду 2FA на електронну пошту адміністратора  
 $subject = 'Код перевірки входу в WordPress';  
 $message = "Було зроблено спробу входу. Ваш код перевірки: " . $two_fa_code;  
 wp_mail($admin_email, $subject, $message);  

 // Збереження ID користувача в сесії для подальшої перевірки  
 set_transient('pending_2fa_user_' . $user->ID, $user->ID, 300); // Закінчується через 5 хвилин  

 // Перенаправлення на сторінку перевірки  
 wp_redirect(home_url('/wp-login.php?step=2fa&user_id=' . $user->ID));  
 exit;  
}  
add_filter('authenticate', 'custom_2fa_login_redirect', 20, 2);  

// Крок 2: Виведення поля для введення коду 2FA  
function custom_2fa_login_form() {  
 if (isset($_GET['step']) && $_GET['step'] == '2fa' && isset($_GET['user_id'])) {  
 ?>  

 Введіть код перевірки, надісланий на електронну пошту адміністратора:  


// Крок 3: Перевірка введеного коду та підтвердження входу  
function custom_2fa_verify_code() {  
 if (isset($_POST['2fa_code']) && isset($_GET['user_id'])) {  
   $user_id = $_GET['user_id'];  
   $entered_code = $_POST['2fa_code'];  
   $stored_code = get_user_meta($user_id, '2fa_code', true);  
   $code_time = get_user_meta($user_id, '2fa_code_time', true);  

   // Перевірка, чи вказаний код співпадає з тим, що був надісланий  
   if ($entered_code == $stored_code && (time() - $code_time) < 300) {  
     // Якщо код правильний і ще не минуло 5 хвилин, входимо в систему  
     delete_user_meta($user_id, '2fa_code');  
     delete_user_meta($user_id, '2fa_code_time');  
     // Перехід до головної сторінки або іншої сторінки після успішного входу  
     wp_redirect(home_url());  
     exit;  
   } else {  
     // Якщо код невірний або час вийшов, виводимо повідомлення  
     echo 'Невірний код або час дії коду минув. Спробуйте знову.';  
   }  
 }  
}  
add_action('wp_login', 'custom_2fa_verify_code');  

Цей код додає до процесу входу в WordPress перевірку двофакторної аутентифікації (2FA), що робить доступ до вашого сайту ще безпечнішим. Спочатку користувач вводить пароль, потім отримує код перевірки, який надсилається на електронну пошту адміністратора, та вводить цей код для підтвердження входу. Якщо все пройшло успішно, користувач перенаправляється на головну сторінку.
Перенаправлення: Замість того, щоб дозволити вам увійти одразу, система відправляє вас на сторінку перевірки, де говорить: “Почекайте! Введіть код, який ми щойно надіслали!”

Чому? Це зупиняє хакерів — навіть якщо вони вгадають ваш пароль, їм потрібен буде код, надісланий на електронну пошту адміністратора, щоб увійти.

Крок 2: Попросити код

Тепер ви на сторінці перевірки. Код створює просту форму, яка говорить:

“Привіт! Перевірте електронну пошту адміністратора і введіть код”

Ви побачите поле для введення коду та кнопку “Перевірити”. За лаштунками система пам'ятає який користувач намагається увійти (щоб пізніше знати, чий код перевіряти).

Крок 3: Перевірка правильності коду

Коли ви натискаєте “Перевірити”, код робить дві важливі перевірки:

  1. Чи правильний код? Він порівнює те, що ви ввели, з кодом, який зберігся раніше.
  2. Чи вийшов термін дії коду? Код дійсний лише 5 хвилин. Якщо ви забарились, система попросить вас почати спочатку.

Якщо обидві перевірки пройшли:

  • Вас авторизує і перенаправить на панель керування WordPress.
  • Код буде видалено (щоб його не можна було використати знову).

Якщо щось не так:

  • Вас поверне на сторінку перевірки з помилкою (наприклад, “Невірний код!” або “Код вийшов з терміну!”).

Чому 2FA важлива для вашого WordPress сайту?

  • Додає додатковий рівень безпеки: Навіть якщо хтось украде ваш пароль, він не зможе увійти без коду.
  • Дуже просто для користувачів: Ви просто вводите код, який отримали на електронну пошту — без потреби в складних додатках чи пристроях.
  • Тимчасові коди на 5 хвилин: Коди швидко спливають за п’ять хвилин, використовуючи таку логіку (settransient(‘pending2fauser’ . $user->ID, $user->ID, 300);), що зменшує ризик їх вгадування хакерами.

Просто і зрозуміло

Уявіть, що ви заходите в свій будинок:

  1. Ви відкриваєте перші двері (ваш пароль для входу).
  2. Охоронець (код) зупиняє вас і каже: “Доведи, що це справді ти, показавши секретну записку, надіслану твоєму другу (адміністратору)!”
  3. Тільки після того, як ви покажете цю записку, ви отримуєте доступ до будинку.

Ось що робить цей фрагмент коду 2FA для вашого сайту WordPress!

Дайте знати, якщо хочете щось змінити — це ж ваша система безпеки!

Завершення цього туторіалу:

Дякую, що прочитали до кінця, і бажаю гарного дня!
Ви круті! 🙌

Давайте рости, вчитися і створювати чудові речі разом!
Не забудьте натискати «аплодувати» 👏, зберігайте це в списку і слідуйте за мною.

Залишаймося друзями! Залишайтеся на зв'язку зі мною на інших платформах:

LinkedIn | dev.to| Bluesky

Перекладено з: Here is how you can Set Up Two-Factor Authentication on WordPress Without Plugin

Leave a Reply

Your email address will not be published. Required fields are marked *