Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋””/๋ชจ์˜ ํ•ดํ‚น - ๊ณผ์ œ

[๊ณผ์ œ] 03์ฃผ์ฐจ(2) ๋กœ๊ทธ์ธ ๋กœ์ง (์‹๋ณ„/์ธ์ฆ/ํ•ด์‹œ)

Gearvirus(junyup2) 2023. 11. 8. 23:09

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋”” - ๊ณผ์ œ 03์ฃผ์ฐจ(2) ๋กœ๊ทธ์ธ ๋กœ์ง (์‹๋ณ„/์ธ์ฆ/ํ•ด์‹œ)

 

๊ธฐ์กด ๊ณผ์ œ์—์„œ ์‚ฌ์šฉํ•œ ๋กœ์ง : ์‹๋ณ„ / ์ธ์ฆ ๋ถ„๋ฆฌ (with ํ•ด์‹œ)

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋”” - ๊ณผ์ œ 02์ฃผ์ฐจ(2) (ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๊ตฌํ˜„)

 

์‹๋ณ„/์ธ์ฆ/Hash๋ฅผ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ ๋กœ์ง 4๊ฐ€์ง€ ๊ตฌํ˜„

  1. ์‹๋ณ„/์ธ์ฆ ๋™์‹œ
  2. ์‹๋ณ„/์ธ์ฆ ๋ถ„๋ฆฌ
  3. ์‹๋ณ„/์ธ์ฆ ๋™์‹œ (with ํ•ด์‹œ) 
  4. ์‹๋ณ„/์ธ์ฆ ๋ถ„๋ฆฌ (with ํ•ด์‹œ)

1) ์‹๋ณ„/์ธ์ฆ ๋™์‹œ

<?php
    require_once("inc/db.php");

    $userID = isset($_POST['userID']) ? $_POST['userID'] : null;
    $pass = isset($_POST['pass']) ? $_POST['pass'] : null;

    // ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒดํฌ
    if($userID == null || $pass == null){
        header("Location: /login.php");
        exit();
    }

    // ํšŒ์› ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ์ผ์น˜์—ฌ๋ถ€ ํ™•์ธ (์•„์ด๋”” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋™์‹œ ์กฐํšŒ)
    $db_conn = db_connect();
    $sql = "SELECT * FROM userTbl WHERE userID= '$userID' and pass= '$pass'";
    $ret = mysqli_query($db_conn, $sql);
	// ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธ
    $cnt = mysqli_num_rows($ret);

    // ํšŒ์› ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ($cnt == 0)
    // ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋งž์•˜๋‹ค๋ฉด ($cnt == 1)
    if($cnt != 1){
        // echo '<script>alert("๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž…๋ ฅ"); history.back(-1)</script>';
        exit();
    }
    // ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด fetch
    $row = mysqli_fetch_array($ret);
    $userName = $row['name'];
    
    session_start();
    $_SESSION['member_id'] = $userID;
    $_SESSION['member_name'] = $userName;

    mysqli_close($db_conn);
    header("Location: /home.php");
?>
  • ํšŒ์› ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ์ผ์น˜์—ฌ๋ถ€ ํ™•์ธ (์•„์ด๋”” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋™์‹œ ์กฐํšŒ)
  • SELECT * FROM userTbl WHERE userID= '$userID' and pass= '$pass'"
  •  $cnt = mysqli_num_rows($ret); ๊ฐ’์ด 1์ธ์ง€ ํŒ๋‹จ
    • $cnt == 0 : ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ ๊ฐ’์ด ์—†์Œ - ๋กœ๊ทธ์ธ ์‹คํŒจ
    • $cnt == 1 : ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ ๊ฐ’์ด ์กด์žฌ - ๋กœ๊ทธ์ธ ์„ฑ๊ณต
      • (๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด 1)
  • ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ mysqli_fetch_array($ret);๋ฅผ ํ†ตํ•ด ํšŒ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ

2) ์‹๋ณ„/์ธ์ฆ ๋ถ„๋ฆฌ

<?php
    require_once("inc/db.php");

    $userID = isset($_POST['userID']) ? $_POST['userID'] : null;
    $pass = isset($_POST['pass']) ? $_POST['pass'] : null;

    // ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒดํฌ
    if($userID == null || $pass == null){
        header("Location: /login.php");
        exit();
    }

    // ํšŒ์› ๋ฐ์ดํ„ฐ ์กฐํšŒ
    $db_conn = db_connect();
    $sql = "SELECT * FROM userTbl WHERE userID= '$userID'";
    $ret = mysqli_query($db_conn, $sql);
    
    $row = mysqli_fetch_array($ret);
    $cnt = mysqli_num_rows($ret);
    
    // ํšŒ์› ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด
    if($row['userID'] == null || $cnt == 0){
        echo '<script>alert("๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž…๋ ฅ"); history.back(-1)</script>';
        exit();
    }
    // ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ
    if($pass != $row['pass']){
        echo '<script>alert("๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž…๋ ฅ"); history.back(-1)</script>';
        exit();
    }
    $userName = $row['name'];
    
    session_start();
    $_SESSION['member_id'] = $userID;
    $_SESSION['member_name'] = $userName;

    mysqli_close($db_conn);
    header("Location: /home.php");
?>
  •  if($row['userID'] == null || $cnt == 0)
    • $row['userID'] == null ์กฐํšŒ๋œ ์ •๋ณด๊ฐ€ ์—†์Œ
    • $cnt == 0 ์ผ์น˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ 0
  • ์•„์ด๋”” ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ ํ›„
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ
    • if($pass != $row['pass']) : ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฉˆ์ถ”๊ณ , ์ผ์น˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ์œผ๋กœ
    • ์ž…๋ ฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ DB์— ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •๋ณด๋ฅผ ๋Œ€์กฐ

 


3) ์‹๋ณ„/์ธ์ฆ ๋™์‹œ (with ํ•ด์‹œ)

 

๋ฌธ์ œ ๋ฐœ์ƒ

    // ์ž…๋ ฅ ๋น„๋ฐ€๋ฒˆํ˜ธ HASH ๋ณ€ํ™˜
    $input_pw = password_hash($pass, PASSWORD_BCRYPT);

    // ํšŒ์› ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ์ผ์น˜์—ฌ๋ถ€ ํ™•์ธ (์•„์ด๋”” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋™์‹œ ์กฐํšŒ)
    $db_conn = db_connect();
    $sql = "SELECT * FROM userTbl WHERE userID= '$userID' and pass= '$input_pw'";
    $ret = mysqli_query($db_conn, $sql);
    
    $row = mysqli_fetch_array($ret);
    $cnt = mysqli_num_rows($ret);

    // ํšŒ์› ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ($cnt == 0)
    // ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋งž์•˜๋‹ค๋ฉด ($cnt == 1)
    if($cnt != 1){
        // echo '<script>alert("๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž…๋ ฅ"); history.back(-1)</script>';
        exit();
    }
  • ์ˆœ์„œ์ ์ธ ์ธก๋ฉด์—์„œ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐ๋˜์—ˆ์ง€๋งŒ, ๊ณ„์†ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š์Œ.
  • ๊ธฐ์กด ๊ณผ์ œ ์ง„ํ–‰์‹œ password_hash($pass, PASSWORD_BCRYPT) ๋ฅผ ์ด์šฉํ•˜์—ฌ ์•”ํ˜ธํ™” ํ•จ
  • password_hash์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ์ˆ™์ง€ ๋ถ€์กฑ
    • password_hash ( string $password , int $algo [, array $options ] ) 
      • $algo : ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ˜•ํƒœ
    • ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ˜•ํƒœ ( PASSWORD_DEFAULT , PASSWORD_BCRYPT ) ๋‘๊ฐ€์ง€ ์ค‘ ์„ ํƒ
    • ๊ธฐ์กด MySQL์˜ password() ํ•จ์ˆ˜๋Š” ๋‹จ์ˆœ ํ•ด์‹œ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜๋ฉด, ๋งค๋ฒˆ ๊ฐ™์€ ํ•ด์‹œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ด
    • ์ด๋กœ ์ธํ•ด Rainbow table์ด๋ผ๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ํ•ด์‹œ ๊ฒฐ๊ณผ๊ฐ’๊ณผ ๋น„๊ตํ•˜๋ฉด, ๋‹จ์ˆœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์‰ฝ๊ฒŒ ํ•ด์‹œ ์ด์ „ ๊ฐ’์ด ์•Œ๋ ค์ง€๋Š” ์ทจ์•ฝ์ ์ด ์กด์žฌ
    • ์ด๋Ÿฐ ์ทจ์•ฝ์ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ ์ „์šฉ ํ•ด์‹œ๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ƒ์„ฑ์‹œ๋งˆ๋‹ค ํ•ด์‹œ๋œ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‹ฌ๋ผ์ ธ์„œ Rainbow table์„ ํ†ตํ•œ ๊ณต๊ฒฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋จ
    • ๊ทธ๊ฒƒ์ด password_hash() ํ•จ์ˆ˜์˜ BCRYPT ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๋”ฐ๋ผ์„œ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜์„ ํ•ด๋„ ๊ฐ™์€ ๊ฐ’์ด ์•„๋‹Œ, ๋งค๋ฒˆ ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋จ
  • ์ž…๋ ฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹œ ๋ณ€ํ™˜ ํ›„ ๋น„๊ตํ•˜๋ ค๋ฉด ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์‚ฝ์ž…ํ•ด์ค˜์•ผ ํ•จ

4) ์‹๋ณ„/์ธ์ฆ ๋ถ„๋ฆฌ (with ํ•ด์‹œ)

<?php
    require_once("inc/db.php");

    $userID = isset($_POST['userID']) ? $_POST['userID'] : null;
    $pass = isset($_POST['pass']) ? $_POST['pass'] : null;

    // ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒดํฌ
    if($userID == null || $pass == null){
        header("Location: /login.php");
        exit();
    }

    // ํšŒ์› ๋ฐ์ดํ„ฐ ์กฐํšŒ
    $db_conn = db_connect();
    $sql = "SELECT * FROM userTbl WHERE userID= '$userID'";
    $ret = mysqli_query($db_conn, $sql);
    
    // ํšŒ์› ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด
    $row = mysqli_fetch_array($ret);
    $cnt = mysqli_num_rows($ret);
    if($row['userID'] == null || $cnt == 0){
        echo '<script>alert("๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž…๋ ฅ"); history.back(-1)</script>';
        exit();
    }
    // ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ
    $is_pw = password_verify($pass, $row['pass']);

    if($is_pw === false){
        echo '<script>alert("๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž…๋ ฅ"); history.back(-1)</script>';
        exit();
    }
    $userName = $row['name'];
    
    session_start();
    $_SESSION['member_id'] = $userID;
    $_SESSION['member_name'] = $userName;

    mysqli_close($db_conn);
	header("Location: /home.php");
?>
  • ๋กœ๊ทธ์ธ์‹œ์—๋Š” ์ž…๋ ฅ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹œ ๋ณ€ํ™˜ํ•ด์„œ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜
  • password_verify() ๋กœ ๋น„๊ต
    • $is_pw = password_verify($pass, $row['pass']);
    • ์ž…๋ ฅ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ํ•ด์‹œ ๋ณ€ํ™˜๋˜์–ด ์žˆ๋Š” DB์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋น„๊ต
    • ์ผ์น˜ํ•˜๋ฉด True ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด False ๋ฅผ ๋ฐ˜ํ™˜

ํ›„๊ธฐ

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ / ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ž…๋ ฅ ๊ฐ’๊ณผ ์ถœ๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ํŠน์ง•, ๊ณผ์ •, ํŠน์ด์‚ฌํ•ญ์— ๋Œ€ํ•˜์—ฌ ์ˆ™์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋‹ค์‹œ๊ธˆ ๊นจ๋‹ฌ์Œ

  • (3) ์‹๋ณ„ / ์ธ์ฆ ๋™์‹œ (with ํ•ด์‹œ) ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ์ž˜ ๋ชป ์ง ์ค„ ์•Œ๊ณ  ๊ณ„์†ํ•ด์„œ ์‚ฝ์งˆ์„ ํ•จ
    • ์•Œ๊ณ ๋ณด๋‹ˆ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๊ฐ€ ๋ณ€ํ™˜๊ฐ’์ด ์ผ์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ ์ด์—ˆ์Œ
  • ํ•ด์‹œ ๋ณ€ํ™˜์— ๋Œ€ํ•œ ์ดํ•ด ๋ถ€์กฑ, ์‚ฌ์šฉํ•œ ํ•ด์‹œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ˆ™์ง€ ๋ถ€์กฑ

 

 

 

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜