×

Tạo hệ thống đăng nhập hai lớp bảo mật (2FA) trong PHP

Trong thời điểm hiện nay, an ninh mạng trở nên vô cùng quan trọng khi mà các dịch vụ trực tuyến ngày càng phát triển mạnh mẽ. Việc bảo vệ thông tin cá nhân người dùng là một ưu tiên hàng đầu. Một trong những phương pháp hiệu quả để gia tăng mức độ bảo mật là sử dụng xác thực hai lớp (2FA). Trong bài viết này, chúng ta sẽ tìm hiểu cách xây dựng hệ thống xác thực 2FA trong PHP.

1. Khái niệm về xác thực hai lớp (2FA)

Xác thực hai lớp (2FA) là một biện pháp bảo mật yêu cầu người dùng cung cấp hai thông tin xác minh khác nhau trước khi được truy cập vào tài khoản. Thông thường, hệ thống này cần:

  • Thông tin mà người dùng biết (mật khẩu).
  • Thông tin mà người dùng có (một mã OTP gửi qua email hoặc ứng dụng).

2. Cài đặt môi trường phát triển

Trước khi bắt đầu, bạn cần chuẩn bị môi trường phát triển PHP và cài đặt một số thư viện cần thiết. Bạn có thể sử dụng XAMPP hoặc bất kỳ phần mềm tương tự để chạy PHP trên máy tính.

3. Bước đầu tiên: Đăng ký tài khoản

Trước khi triển khai 2FA, hệ thống cần có chức năng đăng ký và đăng nhập bình thường. Hãy tạo một bảng cơ bản để lưu thông tin người dùng:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL,
    otp_secret VARCHAR(100)
);

4. Bước hai: Cài đặt thư viện Google Authenticator

Để tích hợp 2FA, bạn có thể sử dụng thư viện Google Authenticator. Cài đặt thư viện này bằng Composer:

composer require pragmarx/google2fa

5. Tạo mã OTP và lưu trữ trong cơ sở dữ liệu

Sau khi người dùng đăng ký thành công, bạn cần tạo một mã OTP dành riêng cho họ. Dưới đây là ví dụ về cách tạo mã OTP và lưu trữ:

use PragmaRX\Google2FA\Google2FA;

$google2fa = new Google2FA();

// Tạo một secret key
$secretKey = $google2fa->generateSecretKey();

// Lưu secret key vào cơ sở dữ liệu
$updateUserQuery = "UPDATE users SET otp_secret = :otp_secret WHERE id = :id";
$stmt = $pdo->prepare($updateUserQuery);
$stmt->execute(['otp_secret' => $secretKey, 'id' => $userId]);

// Tạo qrcode cho ứng dụng Google Authenticator
$qrcode_url = $google2fa->getQRCodeUrl(
    'Tên Ứng Dụng',
    $userEmail,
    $secretKey
);

6. Đăng nhập với 2FA

Khi người dùng đăng nhập, bạn cần kiểm tra mật khẩu trước tiên, sau đó yêu cầu mã OTP được sinh ra bởi ứng dụng Google Authenticator:

$password = $_POST['password'];
$otp = $_POST['otp'];

$query = "SELECT * FROM users WHERE username = :username";
$stmt = $pdo->prepare($query);
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();

if (password_verify($password, $user['password'])) {
    // Kiểm tra OTP
    $google2fa = new Google2FA();
    $valid = $google2fa->verifyKey($user['otp_secret'], $otp);

    if ($valid) {
        echo "Đăng nhập thành công";
    } else {
        echo "Mã xác thực không đúng";
    }
} else {
    echo "Mật khẩu không đúng";
}

7. Kết luận

Việc tích hợp xác thực hai lớp giúp tăng cường bảo mật cho hệ thống của bạn, bảo vệ người dùng khỏi các cuộc tấn công chiếm đoạt tài khoản. Bằng cách sử dụng PHP và thư viện Google Authenticator, bạn có thể triển khai một hệ thống xác thực hai lớp một cách hiệu quả và dễ dàng. Hãy đảm bảo rằng bạn thường xuyên cập nhật các biện pháp bảo mật để bảo vệ hệ thống của mình khỏi những mối đe dọa mới.

Comments