2012-05-21 7 views
6

Ho inviato la mia domanda here e prima di modificare il post era chiusa come non è una domanda reale!controllare nome utente e password sul database (script incluso)

Ho un form di login come questo:

<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> 

Come si vede, questa forma autentica l'utente attraverso check_user-pass.php.
Cerca quelle credenziali sul mio database; se esistono, restituisce OK, altrimenti restituisce il valore NO.

Quindi la mia domanda è: esattamente quale codice dovrei includere in check_user-pass.php?
Ho provato ad aggiungere altro codice ma non ho potuto farlo anche io! Il mio codice attuale è:

<?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

Questo codice deve funzionare. Qual è il problema che stai affrontando ?? –

+0

@PdsIr ** Benvenuto in StackOverflow! ** Assicurati di [leggere il faq] (http://stackoverflow.com/faq). –

risposta

3

Il nome si forma è user_name ma nello script cerchi username

$username=$_POST['username']; 

dovrebbe essere

$username=$_POST['user_name']; 

EDIT:
Se si utilizza crypt per crittografare la password prima di inserirli nel database, prova questo

$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; 
} 

EDIT: MyBB sembra utilizzare un crapload di hashing MD5 per le loro password, provate questo

$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; 
} 

hashing è anche un modo per cui non si può tornare indietro le password già nel db, dovrai solo far sì che gli utenti cambino/aggiornino le loro password.
Se quanto sopra funziona, non è necessario disattivare la crittografia e tutto dovrebbe andare bene.

+0

ho cambiato i miei messaggi di post principale, vedere che potrebbe essere utile aiutarmi: D –

+0

ho cambiato la mia password per decifrare il formato e inserire la password semplice nella password del database archiviato e posso accedere a sucsseceful ma è impossibile cambiare tutti i miei utenti del forum e il suo non è vero in faccia di sicurezza. –

+0

@PdsIr vedi la mia modifica – Musa

2

La maggior parte delle volte le password nei database mysql sono crittografate. Se li hai inseriti direttamente nel database, potrebbero non avere sale. Prova criptare la password prima di passare nella query:

$crypted_pass = crypt($password); 

Se c'è un sale (spesso le prime due lettere del nome utente), passare che con la funzione cripta:

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

il suo database di controllo non corretto dice sempre Nome utente o password errati. –

+0

È la connessione al database che fornisce un passaggio/utente errato o quando controlla il modulo? Dove e qual è il messaggio di errore? – aynber

+0

ho cambiato la mia password per decifrare il formato e inserire password semplice nella password del database archiviato e posso accedere a sucsseceful ma è impossibile cambiare tutti i miei utenti del forum e non è vero in faccia di sicurezza –

2

Try qualcosa di semplice:

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

Questo vedrà se si restituisce qualcosa maggiore di 1 o più valori.

+0

il suo database di assegni non corretto dice sempre Nome utente o password errati. –

+0

ho cambiato $ username = $ _ POST ['user_name']; ma hanno anche lo stesso problema! –

+0

@PdsIr È possibile che ci siano più voci con lo stesso nome utente e password – Musa