2012-05-21 11 views
6

Ich habe meine Frage here geschrieben und bevor ich den Beitrag bearbeitet wurde es als keine echte Frage geschlossen wurde!Überprüfen Sie Benutzername und Passwort für die Datenbank (Skript enthalten)

Ich habe ein Login-Formular wie folgt aus:

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

Wie Sie sehen, ist diese Form der Benutzer durch check_user-pass.php authentifiziert.
Es sucht nach diesen Anmeldeinformationen in meiner Datenbank; Wenn sie vorhanden sind, gibt sie OK zurück, sonst gibt sie den Wert NO zurück.

Also meine Frage ist: genau welchen Code sollte ich in check_user-pass.php aufnehmen?
Ich habe versucht, mehr Code hinzuzufügen, konnte das aber auch nicht! Meine aktuellen Code ist:

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

Dieser Code muss funktionieren. Was ist das Problem, vor dem Sie stehen? –

+0

@PdsIr ** Willkommen bei StackOverflow! ** Stellen Sie sicher, [lesen Sie die FAQ] (http://StackOverflow.com/faq). –

Antwort

3

Der Name in Sie bilden user_name ist aber in Ihrem Skript suchen Sie username

$username=$_POST['username']; 

$username=$_POST['user_name']; 

EDIT sein sollte:
Wenn Sie crypt, um Ihr Passwort zu verschlüsseln, bevor Sie sie in die Datenbank setzen, versuchen Sie dies

$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 scheint ein crapload von md5 für ihre Passwörter Hashing zu verwenden, versuchen Sie diese

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

auch ein Weg-Hashing, so dass Sie nicht die Passwörter bereits in der DB zurück kann, Sie müssen nur die Benutzer dazu bringen, ihre Passwörter zu ändern/zu aktualisieren.
Wenn das obige funktioniert, müssten Sie die Verschlüsselung nicht ausschalten, und alles sollte in Ordnung sein.

+0

Ich ändere meine Hauptpost Bitte sehen, dass einige hilfreich sein können, um mir zu helfen: D –

+0

Ich ändere mein Passwort zu entschlüsseln Format und setzen einfaches Passwort in Datenbank Passwort abgelegt und ich kann erfolgreich anmelden, aber es unmöglich, meine alle Forum Benutzer und seine zu ändern stimmt nicht im Sicherheitsgesicht. –

+0

@PdsIr sehe meine Bearbeitung – Musa

2

Meistens sind Kennwörter in mysql-Datenbanken verschlüsselt. Wenn Sie sie direkt in die Datenbank eingegeben haben, haben sie möglicherweise kein Salz. Versuchen Sie, das Passwort zu verschlüsseln, bevor Sie es in die Abfrage übergeben:

$crypted_pass = crypt($password); 

Wenn es ein Salz (oft die ersten beiden Buchstaben des Benutzernamens), passieren, dass in der Krypta Funktion:

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

seine Datenbank nicht richtig überprüfen, immer sagen falscher Benutzername oder Passwort. –

+0

Ist es die Datenbankverbindung, die falschen Benutzer/Pass gibt, oder wenn es das Formular überprüft? Wo und was ist die Fehlermeldung? – aynber

+0

Ich ändere mein Passwort, um Format zu entschlüsseln und einfaches Passwort in Datenbank Passwort abgelegt und ich kann sucsssecef einloggen, aber es unmöglich, meine alle Forum-Benutzer zu ändern und es ist nicht wahr in Sicherheit Gesicht –

2

Try etwas einfaches:

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

Dies wird sehen, wenn Sie etwas größer als 1 oder mehr Werte zurückgeben.

+0

seine Datenbank nicht richtig überprüfen immer sagen Falscher Benutzername oder Passwort. –

+0

ich änderte $ username = $ _ POST ['user_name']; aber auch gleiches Problem! –

+0

@PdsIr Ist es möglich, dass es mehr als einen Eintrag mit dem gleichen Benutzernamen und Passwort gibt – Musa

Verwandte Themen