- Bước 1: Cài đặt mã xác thực (OTP) qua email
- 1.1. Tạo hàm gửi mã OTP qua email
- 1.2. Tạo một hàm kiểm tra mã OTP khi đăng nhập
- Bước 2: Tạo Form nhập mã OTP
- 2.1. Tạo form OTP trên trang đăng nhập
- Bước 3: Thêm mã OTP vào trang đăng nhập
- 3.1. Tự động gửi OTP khi người dùng đăng nhập thành công
- Bước 4: Kiểm tra và xử lý mã OTP
- 4.1. Cập nhật mã kiểm tra trong hàm check_user_otp()
- Bước 5: Đảm bảo bảo mật
- Kết luận
Bước 1: Cài đặt mã xác thực (OTP) qua email
Đầu tiên, chúng ta sẽ cần một hàm để gửi mã OTP qua email khi người dùng đăng nhập vào trang WordPress.
1.1. Tạo hàm gửi mã OTP qua email
Thêm đoạn mã sau vào file functions.php của theme hoặc một plugin tùy chỉnh của bạn:
// Tạo mã OTP và gửi qua email
function send_otp_to_user($user_email) {
$otp = rand(100000, 999999); // Tạo mã OTP ngẫu nhiên 6 chữ số
update_user_meta(get_current_user_id(), 'user_otp', $otp); // Lưu OTP vào user_meta
// Nội dung email gửi OTP
$subject = 'Mã OTP xác thực của bạn';
$message = 'Mã OTP của bạn là: ' . $otp;
wp_mail($user_email, $subject, $message); // Gửi email
}
1.2. Tạo một hàm kiểm tra mã OTP khi đăng nhập
Chúng ta sẽ cần một form để người dùng nhập mã OTP khi đăng nhập.
// Kiểm tra mã OTP
function check_user_otp($user_login, $user) {
if (isset($_POST['otp'])) {
$input_otp = $_POST['otp'];
$stored_otp = get_user_meta($user->ID, 'user_otp', true);
if ($input_otp != $stored_otp) {
wp_logout(); // Nếu mã OTP sai, logout user
wp_redirect(home_url()); // Quay lại trang chủ
exit;
}
}
}
add_action('wp_login', 'check_user_otp', 10, 2);
Bước 2: Tạo Form nhập mã OTP
Để người dùng có thể nhập mã OTP, bạn cần một form xuất hiện sau khi họ đăng nhập. Đoạn mã dưới đây sẽ thêm một form nhập mã OTP vào trang đăng nhập WordPress.
2.1. Tạo form OTP trên trang đăng nhập
Chỉnh sửa file functions.php để thêm form này vào trang đăng nhập:
// Thêm form nhập OTP vào trang đăng nhập
function otp_input_form() {
if (!is_user_logged_in()) return; // Chỉ hiển thị cho người dùng đã đăng nhập
echo '<div class="otp-form">';
echo '<form action="' . esc_url($_SERVER['REQUEST_URI']) . '" method="POST">';
echo '<label for="otp">Nhập mã OTP đã gửi tới email của bạn:</label>';
echo '<input type="text" name="otp" id="otp" required />';
echo '<input type="submit" value="Xác nhận" />';
echo '</form>';
echo '</div>';
}
add_action('login_form', 'otp_input_form');
Bước 3: Thêm mã OTP vào trang đăng nhập
Để đảm bảo mã OTP được gửi khi người dùng cố gắng đăng nhập, bạn cần thêm một bước gửi mã OTP khi người dùng thực hiện đăng nhập thành công.
3.1. Tự động gửi OTP khi người dùng đăng nhập thành công
// Gửi mã OTP khi đăng nhập thành công
function send_otp_on_login($user_login, $user) {
$user_email = $user->user_email;
send_otp_to_user($user_email); // Gửi mã OTP đến email
}
add_action('wp_login', 'send_otp_on_login', 10, 2);
Bước 4: Kiểm tra và xử lý mã OTP
Khi người dùng nhập mã OTP vào form và nhấn “Xác nhận”, hệ thống sẽ kiểm tra mã OTP họ nhập vào với mã đã gửi qua email.
4.1. Cập nhật mã kiểm tra trong hàm check_user_otp()
// Kiểm tra mã OTP khi người dùng nhập
function check_user_otp($user_login, $user) {
if (isset($_POST['otp'])) {
$input_otp = $_POST['otp'];
$stored_otp = get_user_meta($user->ID, 'user_otp', true);
if ($input_otp != $stored_otp) {
wp_logout(); // Nếu mã OTP sai, logout user
wp_redirect(home_url()); // Quay lại trang chủ
exit;
} else {
delete_user_meta($user->ID, 'user_otp'); // Xóa mã OTP sau khi xác thực thành công
}
}
}
Bước 5: Đảm bảo bảo mật
Để đảm bảo rằng hệ thống này hoạt động hiệu quả, bạn nên áp dụng các biện pháp bảo mật sau:
-
Mã OTP có thời gian sống ngắn: Để tránh tình trạng lạm dụng, mã OTP chỉ có thể sử dụng trong một khoảng thời gian nhất định (ví dụ: 5 phút).
-
Giới hạn số lần nhập sai mã OTP: Cần giới hạn số lần nhập sai mã OTP để tránh việc tấn công kiểu brute force.
Kết luận
Hệ thống xác thực hai yếu tố (2FA) tự tạo trên WordPress sẽ giúp bảo vệ tài khoản của bạn tốt hơn mà không cần sử dụng plugin. Tuy phương pháp này không có nhiều tính năng nâng cao như các plugin 2FA khác, nhưng vẫn đủ để nâng cao mức độ bảo mật cho trang web của bạn.
Hãy chắc chắn rằng bạn luôn cập nhật và cải thiện mã của mình để bảo vệ người dùng khỏi các cuộc tấn công.
Bình luận