2014-04-11 6 views
2

로그인 스크립트에 작은 누출이 있습니다.PHP 암호는 암호 뒤에 접미사가 붙어 있어도 true를 반환합니다.

암호 "s3cret"을 사용하여 "David"사용자가 있다고 가정 해 봅니다. David이 s3cret로 로그인하면 그는 로그인하고 모든 것이 잘 작동합니다. 그가 "oijopij"로 로그인하면 시스템에서 예상대로 액세스 권한을 부여하지 않습니다. 그는 "s3cretHelloimasuffix"로 로그인하려고하면 그러나, 그는 또한에 기록이 내가 토굴로 해시를 생성하는 부분이다.

$salt = //Some random salt string 
$hash = crypt($user->pass, $salt); 

이 해시는 다음 DB에 삽입됩니다.

if (crypt($this->data->pass, $user->pass) == $user->pass) 
    return true; 

return false; 

이 모두 실제로 암호 해시에 대해 패스워드를 검사하는 부분, 그 다음이며, 해시 정확하다. 하지만 암호를 접미사로 사용하더라도 여전히 true를 반환합니다.

편집 : 실제 질문을 잊어 버렸습니다 : 어떻게이 문제를 해결합니까? 실제로는 보안 누출로 간주 될 수 있으므로 실제로는 그렇지 않습니다.

답변

4

crypt 당신이 8 문자 암호로 제한됩니다 사용하고 같이

php > echo crypt('1234567', 'abc'); 
ablk9HoaAwzxk 
php > echo crypt('12345678', 'abc'); 
ab1iBa.N.U2C6 
php > echo crypt('123456789', 'abc'); 
ab1iBa.N.U2C6 
php > echo crypt('1234567890', 'abc'); 
ab1iBa.N.U2C6 

참고 어떻게 ... 8 ... 89 ... 890 개 버전이 동일한 해시를 가지고있다.

crypt은 더 이상 사용되지 않으므로 더 이상 암호 시스템에 사용하면 안됩니다. password_hash()은 암호 해시에 사용되는 bcrypt을 비롯한 여러 해싱 방법을 지원하는 지금 권장되는 방법입니다.

+0

감사합니다. 나는 그것에 대해 살펴볼 것입니다. 위대한 반응, 나는 당신에게 하나 이상의 포인트를 줄 수 있기를 바랬다. – David