2016-05-07 14 views
0

Im Erstellen einer Webseite für einen Gameserver, der nur eine Registrierungsseite hatte. Alle Benutzer haben sich registriert und aus irgendeinem Grund hat sie das Passwort als Benutzername: Passwort gespeichert, also wenn der Benutzername Meko ist und das Passwort 1234 ist, ist das eigentliche Passwort "Meko: 1234" Ich versuche jetzt einen Login zu machen, aber ich bin nicht sicher, wie ich dieses Passwort überprüfen sollte. Ich habe diese SQL-Abfrage und versucht $ user_username hinzuzufügen: vor, aber es hat nicht zu funktionieren scheint:SQL Query Benutzername: Passwort

$query = "SELECT * FROM account 
       WHERE username = '$user_username' 
       AND sha_pass_hash = '$user_password'"; 

Es braucht $ user_username zu sein: $ user_password

Ich hoffe, dass Sie mir helfen können :)

+2

Die Antwort auf Ihre Frage vorbei ist 'CONCAT()'. Die tatsächliche Antwort besteht darin, Ihre Daten mithilfe eines Migrationsskripts zu reparieren. – CodeCaster

+0

Speichern Sie Kennwörter wirklich als Nur-Text? Das ist sehr gefährlich. – symcbean

+0

Nein, ich speichere Passwörter nicht im Klartext. Die Passwörter sind in sha1 – Kh4zy

Antwort

1

Ich denke, Sie auf PHP?

$username = 'Meko'; 
$user_password = '1234'; 
$altered_pass = $user_username.':'.$user_password; 

if($stmt = mysqli_prepare($con,"select * from account where username = ? and sha_pass_hash = ?")){ 

    mysqli_stmt_bind_param($stmt,'ss',$user_username,sha1($altered_pass)); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_store_result($stmt); 
    if(mysqli_stmt_num_rows($stmt)){ 
     //"yup"; 
    } 
    else{ 
     //"nope"; 
    } 

    mysqli_stmt_close($stmt); 
} 
mysqli_close($con); 
+0

Auf SQL Injection. Der Benutzer sollte SQL-Parameter verwenden oder die Eingabe zumindest bereinigen. – NineBerry

+0

Ich bin PHP, aber es funktioniert nicht. Das habe ich schon probiert. Es gibt mir einen Syntaxfehler, aber wie Codecaster schrieb, muss ich vielleicht CONCAT() verwenden. Ich bin mir nicht sicher wie. Ich habe noch nie davon gehört – Kh4zy

+0

Ich habe meine Antwort aktualisiert! – Infiltrator

0

Sie geben nicht explizit, aber vorausgesetzt, dass Ihr sha_pass_hash einen Hash-Wert des folgenden Format enthält: hash (Benutzername: Passwort), dann hash ‚$ user_username‘ + „:“ + ‚$ user_password‘ und dann vergleiche es mit deinem Passwort.

+1

Das ist wirklich keine Antwort. – tadman

-3
$search = $username.":".$password; 
$query = "SELECT * FROM account WHERE password = ".$search; 

WICHTIG:

Ich hoffe sehr, Sie Ihre Aussagen vorbereiten und Binden Sie Ihre Parameter SQL-Injection-Angriffe zu verhindern. Wenn Sie es nicht sind, lassen Sie es mich wissen und ich kann Ihnen weiterhelfen, damit Ihre Datenbank sicher ist.

Außerdem empfehle ich, dass Sie eine andere Tabelle erstellen und sie mit den Werten in dieser account Tabelle ausfüllen. Die vorherige Antwort ist eine schnelle Lösung, damit sich Ihre Benutzer unterdessen anmelden können, aber auf keinen Fall sollte die vorherige Tabelle so bleiben wie sie ist.

Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen :)

+0

Ich bin nur ein Anfänger mit PHP. Das obige Beispiel funktioniert nicht. Ich habe es mehrmals versucht und es war kein Schreibfehler. Indem ich meine Aussagen vorbereite. Meinst du ich muss sql escape verwenden? :) – Kh4zy

+0

Es ist kein Problem, wenn Sie ein Anfänger sind. Kann ich sehen, wie Sie meinen vorherigen Code implementiert haben? – Webeng

1

Wenn das, was Sie in der Datenbank gespeichert haben eine SHA1-Prüfsumme ist, dann ist das, was Sie vergleichen müssen.

Die Details sind ziemlich skizzenhaft.

Unter der Annahme, dass die Zeile in die Datenbank als

INSERT INTO `account` (`username`, `sha_pass_hash`, ... 
VALUES ('Meko', SHA1('Meko:1234'), ... 

Dann für die Existenz dieser Zeile zu überprüfen gespeichert wurde, gegeben:

$user_username = 'Meko' ; 
$user_password = '1234' ; 

wenn das sind die Werte, die Sie in übergeben möchten die Datenbankabfrage, dann

$sql = 'SELECT ... 
      FROM account a 
      WHERE a.username  = ? 
      AND a.sha_pass_hash = SHA1(CONCAT(? ,':', ?)'; 

$sth = $dbh->prepare($sql); 
$sth->bindValue(1,$user_username, PDO::PARAM_STR); 
$sth->bindValue(2,$user_username, PDO::PARAM_STR); 
$sth->bindValue(3,$user_password, PDO::PARAM_STR); 
$sth->execute(); 
if($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
    // matching row found 
} else { 
    // no matching row found 
} 
$sth->closeCursor(); 

Wenn Sie die MySQL-SHA1-Funktion nicht verwendet und eine andere Funktion zur Berechnung des Hashwerts verwendet haben, verwenden Sie dieselbe Funktion, wenn Sie die Überprüfung durchführen.

Das heißt, wenn die Zeile durch eine Erklärung eines Formulars mehr wie

INSERT INTO account (username, sha_pass_hash, ...) 
VALUES ('Meko','7c4d046a92c441c426ce86f15fa9ecd1fc1fd5f1', ...) 

Dann für die Existenz dieser Zeile zu überprüfen eingefügt wurde, gegeben:

$user_username = 'Meko' ; 
$user_password = '1234' ; 

Dann gehen Sie bitte zum Überprüfen Sie für die Existenz der Zeile wäre so etwas wie folgt:

$sql = 'SELECT ... 
      FROM account a 
      WHERE a.username  = ? 
      AND a.sha_pass_hash = ?'; 

berechnen Sie das Passwort Hash, das gleiche Art und Weise, wie wenn es ursprünglich

getan
$user_sha_hash = sha1($user_username . ':' . $user_password) ; 

Und vorbereiten und die Abfrage ausführen, in dem Prüfsumme SHA String

$sth = $dbh->prepare($sql); 
$sth->bindValue(1, $user_username, PDO::PARAM_STR); 
$sth->bindValue(2, $user_sha_hash, PDO::PARAM_STR); 
$sth->execute(); 
if($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
     // 
} else { 
     // 
) 
$sth->closeCursor(); 
+2

Obwohl ich mag, wie durch Ihre Antwort ist, muss es wirklich erwähnen, dass jetzt ein perfekter Zeitpunkt ist, um das Passwort Problem mit einem richtigen [Passwort Hashing] (http://www.phptherightway.com/#password_hashing) Methode wie [password_hash '] (http://php.net/manual/en/function.password-hash.php). SHA1 ist völlig unzureichend. – tadman

+0

Ich habe die Login-Registrierung nicht an erster Stelle gemacht.Ich versuche, eine kleine Website für einen World of Warcraft-Spielserver zu programmieren, der eine Standardregistrierungsseite hatte, und ich wurde beauftragt, eine Website zu erstellen, die wir verwenden könnten. Selbst wenn wir nur 50 Leute auf dem Servett sind – Kh4zy

Verwandte Themen