2012-12-04 4 views
0

사용자가 데이터베이스에 로그인 할 때마다 암호 값을 변경하는 좋은 방법입니까? 사용자가 시스템에 새 계정을 등록 할 때 암호를 해시하는 해시 함수를 작성했습니다. 사용자가 로그인 할 때마다 데이터베이스의 해시 값이 변경됩니다. 좋든 나쁘니?로그인 할 때마다 데이터베이스의 암호 값을 변경하십시오.

+0

방법에 따라 다릅니다. 몇 가지 코드를 볼 수 있습니까? –

+2

해결하려는 문제는 무엇입니까? –

+1

특정 시나리오를 제시 할 수 없다면 보안상의 이점없이 복잡성이 추가되는 것처럼 들립니다. – Kitsune

답변

1

당신이이 해시 함수를 모두 스스로 설계했다면 ... 아주 나쁜 생각입니다. 왜 이렇게 필요한거야? 소금에 절인 SHA-256 해시 암호를 저장하면 보안이 충분합니다. 암호를 다시 생성 할 필요가 없으며 추가 보안을 제공하지 않습니다. 앱이 SQL-Injection을하는 경향이 있다면이 스키마는 앱을 보호하지 못합니다. 당신은 소금과 키 입력 SHA-256,이 같은 것을 사용하는 경우가 훨씬 더 될 것이다 :

$username = 'Admin'; 
$password = 'gf45_gdf#4hg'; 
$key = 'MySuperSecretKEY!!!!'; 
$salt = hash('sha256', uniqid(mt_rand(), true) . 'something random' . strtolower($username)); 
$hash = $salt . $password . $key; 
$hash = hash('sha256', $hash); 
$hash = $salt . $hash; 

후 확인 (나는 PHP 코더 아니에요, 난 그냥 우리의 애플 리케이션이 안전 할) :

$username = 'Admin'; 
$password = 'gf45_gdf#4hg'; 

$sql = ' 
    SELECT 
    `hash` 
    FROM `users` 
    WHERE 
     `username` = "' . mysql_real_escape_string($username) . '" 
    LIMIT 1 
    ;'; 

$r = mysql_fetch_assoc(mysql_query($sql)); 

$salt = substr($r['hash'], 0, 64); 
$hash = $salt . $password . $key; 
$hash = hash('sha256', $hash); 
$hash = $salt . $hash; 

if ($hash == $r['hash']) { 
    //OK 
} 

공격자가 자신이 모르는 염장 알고리즘을 속일 수있을 것입니다 그래서 경우에도 핵심 그는 SQL 주입 공격에 유효한 해시를 재현 할 수 없기 때문.

+0

미안하지만, 샘플 해싱을 한 다음 조금 수정했습니다. 이 소스는 http://alias.io/2010/01/store-passwords-safely-with-php-and-mysql/입니다. 저는 PHP가 매우 새로워서 정말 많은 것을 배우고 싶습니다. 모든 종류의 도움을 주시면 감사하겠습니다. 덕분에 : D – harmandogilang

+0

각 사용자마다 다른 소금을 사용하는 것이 좋습니다. 생성 된 해시는 실제로 한 계정 만 확인하는 데만 사용할 수 있기 때문에 암호 데이터베이스를 크랙하는 데 걸리는 시간이 길어집니다. – Wizzard

+0

@Wizzard 예, 알고 있습니다. 그러나 사용자가 로그인 할 때마다 해시 값을 변경하는 것이 좋습니다. 사용자가 로그인하면 해시 함수를 호출하여 비밀번호를 다시 해시하고 데이터베이스에 로그인 할 때마다 변경되지만 원시 비밀번호는 동일합니다 – harmandogilang

관련 문제