PHP에서 비밀번호 변경하기
비밀번호 변경은 단순히 개인 계정 내에서 할 수 있게 해서는 안 됩니다. 사용자가 우리 웹사이트에 로그인한 상태로 컴퓨터를 방치할 수 있기 때문입니다 (예: 사무실에서). 이 경우, 비밀번호 변경을 간단히 허용하면 악의를 품은 공격자가 비밀번호를 다른 것으로 변경할 수 있어, 물론 매우 좋지 않은 상황이 될 것입니다.
새 비밀번호로 변경하려면 기존 비밀번호 입력이 필요하도록 만들어야 합니다.
사용자가 접속하면 두 개의 입력 필드가 있는 양식을 볼 수 있는
changePassword.php 페이지를 구현해 보겠습니다.
첫 번째 필드에는 기존 비밀번호를, 두 번째 필드에는 새 비밀번호를 입력해야 합니다:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
전송 버튼을 클릭하면 다음과 같은 작업을 수행해야 합니다:
<?php
$id = $_SESSION['id']; // 세션에서 가져온 사용자 id
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // DB에서 가져온 솔트된 비밀번호
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// DB의 해시와 입력된 기존 비밀번호가 일치하는지 확인
if (password_verify($oldPassword, $hash)) {
$newPasswordHash = password_hash($newPassword, PASSWORD_DEFAULT);
$query = "UPDATE users SET password='$newPasswordHash' WHERE id='$id'";
mysqli_query($link, $query);
} else {
// 기존 비밀번호가 잘못 입력됨, 메시지를 출력
}
?>
설명된 비밀번호 변경 기능을 구현하세요.