2012-12-16 3 views
4

현재 학교 프로젝트를 진행하고 있으며 최근에 로그인 인증을 완료하는 데 아무런 진전이 없었습니다. 새 사용자를 등록하기 위해 해시 및 소금을 사용하고 있습니다. 나는 저에게 seance를 만드는 어떤 자원도 찾을 수 없으므로 여기에 내 자신의 질문에 대한 설명을하기로 결정했습니다.로그인 승인, 비밀번호가 SALT + HASH와 일치하는지 확인하는 방법

이 내 레지스터 스크립트입니다

$username = $_POST['username']; 
    $email = $_POST['email']; 
    $first = $_POST['fname']; 
    $last = $_POST['lname']; 
    $salt = crypt("sha512", false); 
    $pass = $_POST['password']; 
    $password = hash("sha512", $salt . $pass . $salt, false); 

$sql = "INSERT INTO `users` (`username`, `email`, `fname`, `lname`, `salt`, `password`) VALUES ('$username', '$email', '$first', '$last', '$salt', '$password')"; 

가 그럼 난 로그인 페이지 내 인덱스 페이지에 액션 = "checklogin.php"인 checklogin.php 스크립트가 있습니다. 이것은 전체 스크립트입니다 : http://pastebin.com/tKrsHaFU (뚜껑 빈)

내 질문은 내가 데이터베이스에 이미있는 사용자와 함께 index.php 페이지 (로그인 양식)로 오는 사용자의 유효성을 검사하는 방법입니다. 암호 및 해쉬.

+1

대신 bcrypt에 대한 검색을 수행. –

답변

5

첫째, 즉 변화 없음

정적 염을 생성
$salt = crypt("sha512", false); 

.더 나은 하나를 생성하려면 :

$salt = uniqid(mt_rand(), true); // the paranoid use openssl_random_pseudo_bytes() 

는 기록을 확인하려면 SQL이된다 :

$sql="SELECT * FROM $tbl_name WHERE username='$myusername'"; 
$result=mysql_query($sql); 
// ... 
if ($count==1) { 
    $row = mysql_fetch_assoc($result); 
    if (hash('sha512', $row['salt'] . $_POST['mypassword'] . $row['salt']) == $row['password']) { 
     // validation passed, rejoice! 
    } 
} 

하지만, 당신이 여기에 표시되어야합니다 How do you use bcrypt for hashing passwords in PHP?

0

너무 걱정할 필요가 없습니다.

이제 로그인 스크립트와 사용자 정보를 저장하는 데이터베이스의 기본 개념은 각 사용자를 고유하게 식별하는 기본 키로 최소 1 개의 값이 필요하다는 것입니다. 이제는 username이 기본 키인 것처럼 보입니다.

그래서 모든 당신은 단순히 $data = mysql_query("SELECT * FROM table_name") or die(mysql_error()); 여기

table_name 모든 사용자 정보를 저장하는 테이블의 이름이됩니다 실행하기 만하면됩니다. 이제 $info = mysql_fetch_array($data);은 모든 사용자 정보를 배열에 넣습니다. 를 통해

그냥 루프 :

간단한 var_dump($info)은 (P를 유가 등록 할 때 사용자에게 창피 정보를 표시하려면이 donot ... 간단하게 테스트 목적) 사용자의 기타 세부 사항과 함께 당신에게 모든 사용자 이름을 나열합니다 이 배열은 new_user가 제공 한 사용자 이름을 이미 배열에있는 사용자 이름과 일치시킵니다. 일치하면 그를 User already exists !!라고 말하면 막을 수 있습니다. 다른 웹 사이트로 그를 환영합니다.

0

이 기사를 읽을 수 있는지 확인하십시오. 일반적인 디자인 패턴을 보여줍니다. http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_2391-PHP-login-logout-and-easy-access-control.html

많은 노력을 기울일 수 있다면 다음 단계는 데이터베이스의 암호를 모호하게 만드는 것입니다. md5()을 사용하여 암호의 단방향 인코딩을 만들 수 있습니다. 클라이언트가 인코딩 된 암호를 등록하고 저장할 때 md5()을 암호에 적용하십시오. 클라이언트가 로그인 양식에 입력하는 일반 텍스트 암호에 md5()을 적용하십시오. SELECT 쿼리에서 인코딩 된 암호를 사용하십시오. salt 문자열을 md5() 함수 호출에 연결할 수 있습니다. 매번 같은 소금을 사용해야합니다.

http://php.net/manual/en/function.md5.php

안부 ~ 모든 레이

+0

글쎄, 다른 해시 함수를 변경해야 할 때가되었습니다. MD5가 나쁜 것입니다! 잭이 말했듯이 bcrypt를 확인하십시오. –

+0

나는 항상 md5에 대해이 어리 석음을 듣는다. 그것은 사용하기 쉽고 쉬우 며 아주 쉽지 않습니다. 누군가 그것을 깨뜨리려고한다면, 나는 맥주를 사 줄 것이다. 이 문자열과 일치하는 암호를 알려주십시오 : e0f1299ed629d3c8826e2dd2be4780cf –

+0

@Ray Paseur - 다시 만나서이 MD5 해시의 암호를 알려주십시오 : 736417aff94df6884ea929e7014816a2가 안전하다고 생각되면 [Google] (http : // www.google.ch/#q=736417aff94df6884ea929e7014816a2) ... – martinstoeckli

관련 문제