페이지 보안 강화를 위해 노력하고 있으며 일부는 암호화 된 비밀번호로 시작했습니다. password_hash + password verify를 구현하려고하는데, 지금까지 모든 것을 작동시키지 못했습니다. 여기 내 로그인 영역에 있습니다 :PHP password_verify가 데이터베이스에 대해 작동하지 않습니다.
$username = mysqli_real_escape_string($connection, $_POST['username']);
$password = mysqli_real_escape_string($connection, $_POST['password']);
$query = "SELECT username, password FROM `users` WHERE username='$username' and user_enabled='1'";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
if($row = mysqli_fetch_assoc($result)) { $dbpassword = $row['password']; }
if(password_verify($password, $dbpassword)) {
echo "Successful login";
}else{
echo "Invalid Login Credentials.";
}
항상 잘못된 로그인 자격 증명이 있습니다. 나는 사용자의 새 암호를 수정하면
, 내가 뭐하는 거지 다음 데이터베이스에
$pass = mysqli_real_escape_string($connection, $_POST['password']);
$options = [ 'cost' => 10,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$password = password_hash($pass, PASSWORD_BCRYPT, $options)."\n";
$query = "UPDATE users
SET `password` = '".$password."'
WHERE id = ".$_POST['user_id']."
";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
암호가 VARCHAR (255)이며,이 같은 것을 저장되어
$2y$10$Y5HIyAsLMfkXIFSJONPsfO3Gxx3b46H.8/WFdLVH3Fqk2XNfy2Uaq
여기서 내가 뭘 잘못하고 있니?
모든 단계를 디버그하십시오. 'var_dump ($ password)'를 해싱 직후에 데이터베이스에서 체크하고, 데이터베이스에서 꺼낸 후에 확인하십시오. 어떤 단계에서든 변화가 ...? 확인하려는 비밀번호와 동일하게하십시오. – deceze
SQL 주입 빈도가 높은 문자열 연결 대신 준비된 문과 바인딩 된 매개 변수를 사용하는 방법을 배웁니다. – deceze
나는 데이터베이스를 업데이트하기 전에 생성 된 패스워드가 데이터베이스에 저장된 패스워드와 동일하고 로그인 할 때 데이터베이스에서 가져온 패스워드와 동일하다는 것을 확인했다. – cbarg