인증과 식별을 다음의 네 가지로 나눠서 코드를 만들어 볼 예정이다.

 

1. 인증과 식별을 동시에

2. 인증과 식별을 각각

3. 1 + HASH를 적용해서

4. 2 + HASH를 적용해서

 


 

[인증과 식별을 동시에]

처음에 짰던 코드가 아이디와 비밀번호를 동시에 충족했을 때 로그인이 되는 방식이다.

 

<?php
require_once 'db_func.php';

function login1($id, $pw){
    global $db_conn; // 데이터베이스 연결 변수를 전역으로 사용

    // 사용자가 입력한 ID와 비밀번호를 데이터베이스와 비교
    $check_query = "SELECT * FROM test_table WHERE name = '$id' AND pass = '$pw'";
    $check_result = mysqli_query($db_conn, $check_query);

    if (mysqli_num_rows($check_result) > 0) {
        // 로그인 성공
        return mysqli_fetch_assoc($check_result)['name']; // 사용자 ID 반환
    } else {
        return false;
    }
}
?>

 

 

[인증과 식별을 각각]

다음은 인증과 식별이 분리된 코드이다.

 

<?php
require_once 'db_func.php';

function checkUserId($id) {
    global $db_conn;

    // 사용자가 입력한 ID의 존재 여부를 확인
    $query = "SELECT * FROM test_table WHERE name = '$id'";
    $result = mysqli_query($db_conn, $query);
    return mysqli_num_rows($result) > 0;
}

function checkUserPassword($id, $pw) {
    global $db_conn;

    // 사용자가 입력한 ID와 비밀번호가 일치하는지 확인
    $query = "SELECT * FROM test_table WHERE name = '$id' AND pass = '$pw'";
    $result = mysqli_query($db_conn, $query);
    return mysqli_num_rows($result) > 0;
}

function login1($id, $pw) {
    // 먼저 아이디 존재 여부 확인
    if (!checkUserId($id)) {
        return false;
    }

    // 아이디가 존재하면 비밀번호 일치 여부 확인
    if (checkUserPassword($id, $pw)) {
        return $id; // 로그인 성공, 사용자 ID 반환
    } else {
        return false;
    }
}
?>

 

 

 

[인증과 식별을 동시에 + HASH]

다음은 인증과 식별을 동시게 하면서 HASH를 사용해 보안을 강화한 코드이다.

 

<?php
require_once 'db_func.php';

function login1($id, $pw) {
    global $db_conn; // 데이터베이스 연결 변수를 전역으로 사용

    // 사용자가 입력한 ID를 이용해 데이터베이스에서 비밀번호 해시 가져오기
    $check_query = "SELECT pass FROM test_table WHERE name = '$id'";
    $check_result = mysqli_query($db_conn, $check_query);

    if ($check_result && mysqli_num_rows($check_result) > 0) {
        $user_data = mysqli_fetch_assoc($check_result);
        $hashed_password = $user_data['pass'];

        // 사용자가 입력한 비밀번호와 데이터베이스의 해시된 비밀번호 비교
        if (password_verify($pw, $hashed_password)) {
            // 로그인 성공
            return $id; // 사용자 ID 반환
        }
    }

    return false;
}
?>

 

 

[인증과 식별을 각각 + HASH]

다음은 인증과 식별을 각각 하면서 HASH를 통해서 보안을 강화한 코드이다.

 

<?php
require_once 'db_func.php';

function checkUserId($id) {
    global $db_conn;

    // 사용자가 입력한 ID의 존재 여부를 확인
    $query = "SELECT * FROM test_table WHERE name = '$id'";
    $result = mysqli_query($db_conn, $query);
    return mysqli_num_rows($result) > 0;
}

function checkUserPassword($id, $pw) {
    global $db_conn;

    // 사용자가 입력한 ID에 해당하는 비밀번호 해시 가져오기
    $query = "SELECT pass FROM test_table WHERE name = '$id'";
    $result = mysqli_query($db_conn, $query);

    if ($result && mysqli_num_rows($result) > 0) {
        $user_data = mysqli_fetch_assoc($result);
        $hashed_password = $user_data['pass'];

        // 사용자가 입력한 비밀번호와 데이터베이스의 해시된 비밀번호 비교
        return password_verify($pw, $hashed_password);
    }

    return false;
}

function login1($id, $pw) {
    // 먼저 아이디 존재 여부 확인
    if (!checkUserId($id)) {
        return false;
    }

    // 아이디가 존재하면 비밀번호 일치 여부 확인
    if (checkUserPassword($id, $pw)) {
        return $id; // 로그인 성공, 사용자 ID 반환
    } else {
        return false;
    }
}
?>

 

 


 

[번외 : 기존의 비밀번호가 평문으로 되어있다면]

기존 비밀번호를 해시와 하는 코드이다.

웹브라우저에서 저장된 파일을 호출하면 된다.

hash_passwords.php

<?php
require_once 'db_func.php'; // 데이터베이스 연결을 위한 파일 포함

function hashExistingPasswords() {
    global $db_conn;

    // 현재 평문으로 저장된 모든 비밀번호와 사용자 이름(name) 가져오기
    $query = "SELECT name, pass FROM test_table";
    $result = mysqli_query($db_conn, $query);

    if (!$result) {
        die("Error fetching passwords: " . mysqli_error($db_conn));
    }

    while ($row = mysqli_fetch_assoc($result)) {
        $name = $row['name'];
        $plain_password = $row['pass'];
        $hashed_password = password_hash($plain_password, PASSWORD_DEFAULT);

        // 해시된 비밀번호를 데이터베이스에 업데이트
        $update_query = "UPDATE test_table SET pass = '$hashed_password' WHERE name = '$name'";
        if (!mysqli_query($db_conn, $update_query)) {
            die("Error updating password for user $name: " . mysqli_error($db_conn));
        }
    }

    echo "All passwords have been successfully hashed and updated.";
}

hashExistingPasswords();
?>

 

+ Recent posts