๋ชจ์ ํดํน ์คํฐ๋ - ๊ณผ์ 03์ฃผ์ฐจ(2) ๋ก๊ทธ์ธ ๋ก์ง (์๋ณ/์ธ์ฆ/ํด์)
๊ธฐ์กด ๊ณผ์ ์์ ์ฌ์ฉํ ๋ก์ง : ์๋ณ / ์ธ์ฆ ๋ถ๋ฆฌ (with ํด์)
๋ชจ์ ํดํน ์คํฐ๋ - ๊ณผ์ 02์ฃผ์ฐจ(2) (ํ์๊ฐ์ /๋ก๊ทธ์ธ ํ์ด์ง ๊ตฌํ)
์๋ณ/์ธ์ฆ/Hash๋ฅผ ํ์ฉํ ๋ก๊ทธ์ธ ๋ก์ง 4๊ฐ์ง ๊ตฌํ
- ์๋ณ/์ธ์ฆ ๋์
- ์๋ณ/์ธ์ฆ ๋ถ๋ฆฌ
- ์๋ณ/์ธ์ฆ ๋์ (with ํด์)
- ์๋ณ/์ธ์ฆ ๋ถ๋ฆฌ (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 ์๊ณ ๋ฆฌ์ฆ
- ๋ฐ๋ผ์ ๊ฐ์ ํจ์๋ก ๋ณํ์ ํด๋ ๊ฐ์ ๊ฐ์ด ์๋, ๋งค๋ฒ ๋ค๋ฅธ ํด์๊ฐ์ด ๋์ค๊ฒ ๋จ
- password_hash ( string $password , int $algo [, array $options ] )
- ์ ๋ ฅ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ํด์ ๋ณํ ํ ๋น๊ตํ๋ ค๋ฉด ํด๋น ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ์ฝ์ ํด์ค์ผ ํจ
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 ํด์) ๋ฅผ ๊ตฌํํ๋ ๊ณผ์ ์์ ์ฝ๋๋ฅผ ์ ๋ชป ์ง ์ค ์๊ณ ๊ณ์ํด์ ์ฝ์ง์ ํจ
- ์๊ณ ๋ณด๋ ์ฌ์ฉํ ํจ์๊ฐ ๋ณํ๊ฐ์ด ์ผ์ ํ์ง ์์ ๊ฒ ์ด์์
- ํด์ ๋ณํ์ ๋ํ ์ดํด ๋ถ์กฑ, ์ฌ์ฉํ ํด์ ํจ์์ ๋ํ ์์ง ๋ถ์กฑ

์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์