이 검사 암호 내 해시 코드, hashing.php입니다로그인에 문제가 있습니까? mysql에서 해쉬 된 암호로 입력 암호를 확인 했습니까?
<?php
//compare password with hashed one
public static function check_password($hash,$password) {
$full_salt=substr($hash,0,29);
$new_hash=crypt($password,$full_salt);
return ($hash==$new_hash);
}
?>
이 login.php
<?php
require("scripts/hashing.php");
$password=$_POST['txtPassword'];
//checking in database if password exists or not
$checkPassword=mysql_query("SELECT * from $tbl_name WHERE Password='".$password."'");
$resultPassword=mysql_fetch_array($checkPassword);
if(!hashing::check_password($resultPassword['Password'],$password)) {
//back to login
}
?>
입니다 문제는, 그 사용자 입력 잘못된 암호, 그것은 사용자를 허용하는 경우에도 로그인하기.
당신은 $ _POST에서 원시 비밀번호를 당겨 해시 된 암호를 비교하는
<?php
class hashing {
//blowfish
private static $algo='$2a';
//cost parameter
private static $cost='$10';
public static function unique_salt() {
return substr(sha1(mt_rand()),0,22);
}
//generate a hash
function myhash($password) {
return crypt($password,self::$algo.self::$cost.'$'.self::unique_salt());
}
//compare password with hashed one
public static function check_password($hash,$password) {
$full_salt=substr($hash,0,29);
$new_hash=crypt($password,$full_salt);
return ($hash==$new_hash);
}
}
?>
당신이 당신의 반환 문 앞에 결과를 에코하려고 죽을? echo 'hash : "'. $ hash. '"== "'. $ new_hash. '"'; –
사용자가 데이터베이스에없는 암호를 입력하면 어떻게됩니까? '$ resultPassword'는 무엇이 될까요? 그리고 그 값에 대해서'check_password'는 무엇을할까요? – Konerak
논리에 결함이 있습니다. 먼저 데이터베이스에서 패스워드가 주어진 패스워드와 같은 모든 행을 얻습니다 (POST에서 곧바로, 암호화되지 않은 패스). 그런 다음 그들이 평등한지 확인하십시오. 뭐라 짐작합니다 - 그들이 있습니다! 그렇지 않으면 SELECT가 작동하지 않았을 것입니다. – Konerak