간단한 사용자 이름/비밀번호 로그인 체계를 사용하는 작은 웹 앱이 있습니다. 나는 암호를 정확하게 입력 할 때 사용자가 로그인하는 것을 허용하지 않을 것이라는 것을 여러 번 알아 차렸다.PHP 비밀번호 확인
원래대로 초기 등록에서 사용자의 암호를 입력을 암호화 된 코드 :
function encode5t($str) {
for($i=0; $i<5;$i++) {
$str=strrev(base64_encode($str)); //apply base64 first and then reverse the string
}
return $str;
}
$password=mysql_real_escape_string($_POST['password']);
$pass=encode5t($password);
다음 $ 패스 MySQL 데이터베이스에 삽입됩니다. 그런 다음 같은 기능은 로그인에 암호화에 암호를 사용하고,과 같이 데이터베이스에 대해 판정한다
$username = $_POST['username'];
$psw = $_POST['password'];
$npsw=encode5t($psw);
$query = sprintf("SELECT * FROM members WHERE username='%s' AND password='%s'",
mysql_real_escape_string($username),
mysql_real_escape_string($npsw));
문제는 암호 형태로 입력하는 방법에 따라 발생한다. 단순히 입력 한 경우 문제는 없지만 새로 생성 된 비밀번호가 포함 된 이메일에서와 같이 비밀번호가 양식에 복사/붙여 넣어지면 실패합니다. 암호화 기능은 완전히 다른 해시를 만들고 일치하지 않으므로 사용자가 로그인하지 않았습니다.
인코딩을 사용하여이를 사용하여 md5()를 사용했지만 동일한 결과를 얻었습니다 결과 - 잘라 내기/붙여 넣기로 인해 양식에 암호를 입력하는 것과는 다른 해시가 발생합니다.
페이지 인코딩에 입력 된 것과 다른 텍스트가 복사 될 수 있습니까?
복사 - 붙여 넣기로 공백을 둘 수 있습니까? 암호를 저장하는 것은 좋지 않은 접근법입니다. 예를 들어 bcrypt와 같이 느린 소금과 해시를 사용하십시오 (예 : bcrypt). http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing -passwords-in-php, http://stackoverflow.com/questions/1581610/how-can-i-store-my-users-passwords-safely –