Fehler bei Login mit Email

Godstyle

Erfahrenes Mitglied
Hallo Leute,

in meinem Loginscript gibt es einen Fehler, durch irgendweinen Grund interessiert das script das Passwort nicht.
Es entscheidet nur ob der Username oder de email in der DB enthalten ist, dann gibt er die gewünschten daten direkt ohne Prüfung aus.

hier mal das script:



Hier das script dazu:

PHP:
$sql = "SELECT ".
		"id, username, email, password ".
			"FROM ".
				"login ".
		"WHERE ".
			"(username like '".$_REQUEST["name"]."') OR ".
			"(email like '".$_REQUEST["name"]."') AND ". 
   		    "(password = '".($_REQUEST["pass"])."')"; 
$result = mysql_query ($sql);  

if (mysql_num_rows ($result) > 0)  
{   
  $data = mysql_fetch_array ($result);  

  $_SESSION["uid"] = $data["id"];   

 header ("Location: ../index2.php");  

}
else  
{  
 $login_err = "Anmeldung Fehlgeschlagen!"; 
} 
echo $login_err;

Hoffe, dass ihr mir helfen könnt.

LG godstyle
 
Habe selbst noch einen Fehler gefunden, das script sieht nun wie folgt aus:

PHP:
$sql = "SELECT ".
		"id, username, email, password ".
			"FROM ".
				"login ".
		"WHERE ".
			"(username like '".$_REQUEST["name"]."') AND ".
			"(password = '".($_REQUEST["pass"])."') OR ".
			"(email like '".$_REQUEST["name"]."') AND ". 
   		    "(password = '".($_REQUEST["pass"])."')"; 
$result = mysql_query ($sql);  

if (mysql_num_rows ($result) > 0)  
{   
  $data = mysql_fetch_array ($result);  

  $_SESSION["uid"] = $data["id"];   

 header ("Location: ../index2.php");  

}
else  
{  
 $login_err = "Anmeldung Fehlgeschlagen!"; 
} 
echo $login_err;

Denoch nimmt das script leider auch eine anmeldung ohne oder mit falschem Passwort entgegen und leitet den User als erfolgreich angemeldet weiter.

lg
 
Mir fällt beim (sehr) schnellen überfliegen des Codes nur folgendes auf:
1. Dein SQL-Code ist extrem unübersichtlich.
2. Der Fehler könnte hier liegen:
PHP:
$sql = "SELECT ".
        "id, username, email, password ".
            "FROM ".
                "login ".
        "WHERE ".
            "(username like '".$_REQUEST["name"]."') AND ".
            "(password = '".($_REQUEST["pass"])."') OR ".
            "(email like '".$_REQUEST["name"]."') AND ". 
               "(password = '".($_REQUEST["pass"])."')"; 


//ist das gleiche wie:
$sql = "SELECT id, username, email, password FROM login WHERE (username like '".$_REQUEST["name"]."') AND (password = '".($_REQUEST["pass"])."') OR (email like '".$_REQUEST["name"]."') AND (password = '".($_REQUEST["pass"])."')";


//Die Klammern sind falsch gesetzt. Damit AND und OR richtig interpretiert werden musst du die Klammern so setzen:
$sql = "SELECT id, username, email, password FROM login WHERE ((username like '".$_REQUEST["name"]."') AND (password = '".($_REQUEST["pass"])."')) OR ((email like '".$_REQUEST["name"]."') AND (password = '".($_REQUEST["pass"])."'))";

//Oder nur das notwendigste:
$sql = "SELECT id, username, email, password FROM login WHERE (username like '".$_REQUEST["name"]."' AND password = '".$_REQUEST["pass"]."') OR (email like '".$_REQUEST["name"]."' AND password = '".$_REQUEST["pass"]."')";
 
Zuletzt bearbeitet:
Hallo Marco,

das mein code unübersichtlich ist kann ich nicht wirklich nachvollziehen, da ich deinen persönlich wesentlich unübersichtlicher finde.

Dies ist jedoch Ansichtssache und hier nur unwesentlich.

Wenn ich deinen Code verwende bekomme ich direkt weitere Fehlermeldungen und er kann den code gar nicht erst verwenden.

Denoch danke ich dir für deine Bemühungen.

lg
 
Hallo,

ich stimme Marco7757 bzgl. des Codes zu. Finde ihn zudem auch etwas merkwürdig was mysql-Afrage angeht. Ist dein Passwort in der DB nicht wenigstens als md5 abgespeichert? Wenn ja dann solltest du deinen REQUEST dahingehend noch ändern.

Ich habe das Ganze mal in folgender Form bei mir getestet und es funktioniert so auch.

PHP:
<?php

$a1 = "einUser";
$a2 = md5("einPasswort");
$a3 = "eineMail";

$sql = "SELECT       id, username, email, password
FROM      user
WHERE     username like '".$a1."'
AND       password = '".$a2."'
AND       email like '".$a3."'
	    "; 
$result = mysql_query ($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());  

if (mysql_num_rows ($result) > 0)  
{   
  $data = mysql_fetch_array ($result);  

  $_SESSION["uid"] = $data["id"];   

 //header ("Location: index.php");  
 echo "Anmeldung erfolgreich";
 $login_err = "";

}
else  
{  
 $login_err = "Anmeldung Fehlgeschlagen!"; 
} 
echo $login_err;  

?>

Sorry schaut jetzt ein wenig anders aus als Dein ursprünglicher Code, aber dient zum testen und kannst ja $a1-$a3 einfach mal durch deine in der DB gespeicherten Daten ersetzen und du wirst sehen (vorausgesetzt dein Passwort ist als md5 abgespeichert) das es funktioniert.
"like" könnte man auch durch "=" ersetzen.

Gruss
strolch_007
 
Zuletzt bearbeitet:
Hi,

bei solch einer SQL-Abfrage stellen sich mir die Nackenhaare auf ;)
Rein von der Syntax her stimmt sie, jedoch überprüfst du die übergebenen Daten überhaupt nicht. Somit ist es ein leichtes, das ganze Loginsystem auszutricksen und unerlaubt anzumelden.

Schau dir bitte mal diesen Blogeintrag hier an, da steht eigentlich das wichtigste drin. Für dich besonders interessant sollten Punkt 3 und 4 sein.

Gruß
BK
 

Neue Beiträge

Zurück