2012-05-21 3 views
6

내 질문에 here을 게시하고 게시물을 편집하기 전에 으로 실제 질문이 닫혀 있지 않습니다.!데이터베이스의 사용자 이름과 암호 확인 (스크립트 포함)

보시다시피
<html> 
    <head> 
    <title>Password Checking Script</title> 
    </head> 
    <body> 
    <form action="check_user-pass.php" method="POST"> 
     <h3>Please Login</h3> 

     User Name: <input type="text" name="user_name"><br> 
     Password: <input type="password" name="password"> 

     <input type="submit" name="submit" value="Login!"> 
    </form> 
    </body> 
</html> 

,이 양식 check_user-pass.php을 통해 사용자를 인증 :

는이 같은 로그인 폼이 있습니다.
내 데이터베이스에서 해당 자격 증명을 찾습니다. 있을 경우 OK을 반환하고 그렇지 않으면 값 NO을 반환합니다.

제 질문은 정확히 check_user-pass.php에 어떤 코드를 포함시켜야합니까?
더 많은 코드를 추가하려고했지만 그럴 수도 없었습니다! 나의 현재 코드는 다음과 같습니다

<?php 
ob_start(); 
$host=""; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name=""; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password") or die(mysql_error()); 
echo "Connected to MySQL<br />"; 
mysql_select_db("$db_name") or die(mysql_error()); 
echo "Connected to Database<br />"; 
// Check $username and $password 
/* 
if(empty($_POST['username'])) 
{ 
    echo "UserName/Password is empty!"; 
    return false; 
} 
if(empty($_POST['password'])) 
{ 
    echo "Password is empty!"; 
    return false; 
} 
*/ 

// Define $username and $password 
$username=$_POST['username']; 
$password=md5($_POST['pass']); 


// To protect MySQL injection (more detail about MySQL injection) 
$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 

$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if ($count==1) { 
    echo "Success! $count"; 
} else { 
    echo "Unsuccessful! $count"; 
} 

ob_end_flush(); 
?> 
+0

이 코드가 작동해야합니다. 당신이 겪고있는 문제는 무엇입니까 ?? –

+0

@PdsIr ** StackOverflow에 오신 것을 환영합니다! ** [faq] (http://stackoverflow.com/faq)을 반드시 읽으십시오. –

답변

3

당신이 형태의 이름은 user_name하지만 스크립트에서 당신이

$username=$_POST['user_name']; 

편집해야 username

$username=$_POST['username']; 

을 찾아 : 당신이 사용하는 경우
crypt을 사용하여 암호를 데이터베이스에 저장하기 전에 암호화하려면 다음을 시도하십시오.

$sql="SELECT * FROM $tbl_name WHERE username='$username'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if($count==1){ 
    $row = mysql_fetch_assoc($result); 
    if (crypt($password, $row['password']) == $row['password']){ 
     session_register("username"); 
     session_register("password"); 
     echo "Login Successful"; 
     return true; 
    } 
    else { 
     echo "Wrong Username or Password"; 
     return false; 
    } 
} 
else{ 
    echo "Wrong Username or Password"; 
    return false; 
} 

편집 : 당신은 DB에서 이미 암호를 다시 얻을 수 있도록 myBB가 자신의 암호를 해시 MD5의 crapload를 사용하는 것,이

$sql="SELECT * FROM $tbl_name WHERE username='$username'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if($count==1){ 
    $row = mysql_fetch_assoc($result); 
    if (md5(md5($row['salt']).md5($password)) == $row['password']){ 
     session_register("username"); 
     session_register("password"); 
     echo "Login Successful"; 
     return true; 
    } 
    else { 
     echo "Wrong Username or Password"; 
     return false; 
    } 
} 
else{ 
    echo "Wrong Username or Password"; 
    return false; 
} 

또한 해싱 한 가지 방법을 시도 사용자가 비밀번호를 변경/업데이트하도록 유도해야합니다.
위의 코드가 작동하면 암호화를 해제 할 필요가 없으며 모든 것이 정상적이어야합니다.

+0

나는 내 주요 게시판을 바꿔서 도움이 될 것 같아. D –

+0

암호를 해독 형식으로 바꾸고 데이터베이스 암호에 간단한 암호를 넣어서 sucsseceful로 로그인 할 수 있지만 모든 포럼 사용자와 그 사용자를 변경할 수는 없다. 보안면에서는 사실이 아닙니다. –

+0

@Pds 내 편집을 참조하십시오. – Musa

2

대부분의 경우 mysql 데이터베이스의 암호가 암호화됩니다. 데이터베이스에 직접 입력 한 경우 소금이 없을 수도 있습니다. 쿼리로 전달하기 전에 암호를 암호화하십시오 : 소금 (사용자 이름 종종 처음 두 문자)가 있다면

$crypted_pass = crypt($password); 

, 지하실 기능이을에 전달합니다

$salt = substr($username, 0, 2); 
$crypted_pass = crypt($password, $salt); 
+0

데이터베이스의 체크하지 않음이 항상 잘못된 사용자 이름 또는 암호라고 항상 말합니다. –

+0

잘못된 사용자/패스를 제공하는 데이터베이스 연결이거나 폼을 확인할 때입니까? 오류 메시지는 어디서 무엇입니까? – aynber

+0

암호 해독 형식으로 내 암호를 변경하고 데이터베이스 암호에 간단한 암호를 입력하고 sucsseceful을 로그인 할 수 있지만 내 포럼 사용자를 변경하는 것은 불가능하며 보안면에서는 사실이 아닙니다. –

2

시도를 간단한 것 :

if ($count==1) { 
     echo "Success! $count"; 
    } else { 
     echo "Unsuccessful! $count"; 
    } 

1 개 이상의 값을 반환하는 경우 표시됩니다.

+0

잘못된 검사 데이터베이스가 항상 틀린 사용자 이름 또는 암호를 말합니다. –

+0

내가 $ username = $ _ POST를 변경했습니다 [ 'user_name']; 그러나 또한 동일한 문제가있다! –

+0

@PdsIr 동일한 사용자 이름 및 암호를 가진 항목이 두 개 이상있을 수 있습니다. – Musa

관련 문제