You are not logged in.

  • Login

1

Wednesday, March 23rd 2011, 5:18pm

Login Fehlgeschlagen

Hallo Leute,

ich hab mal wieder ein Problem.
Diesmal geht es um einen Login-Bereich mit MySQL-Datenbank.
Hier das Script (hab ich von einem Tutorial):

HTML Code

1
2
3
4
5
6
7
8
9
10
11
<form action="login.php" method="post">
Dein Username:<br>
<input type="text" size="24" maxlength="50"
name="username"><br><br>
 
Dein Passwort:<br>
<input type="password" size="24" maxlength="50"
name="password"><br>
 
<input type="submit" value="Login">
</form>

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
session_start();
 
$verbindung = mysql_connect("localhost", "db_username" , "db_passwort")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("db_name") or die ("Datenbank konnte nicht ausgewählt werden"); 
 
$username = $_POST["username"];
$passwort = md5($_POST["password"]);
 
$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
 
if($row->passwort == $passwort)
    {
    $_SESSION["username"] = $username;
    echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>";
    }
else
    {
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>";
    }
 
?>


Ich habe die Datenbank per PhpMyAdmin gefüttert mit zwei Usern:
Username: test, passwort: test
Username:Fipsi, passwort: janeinja

Ich habe auch schon überprüft, ob die md5-verschlüsselung nicht geht, aber auch ohne funktioniert das nicht.
Ich weiß jez nix mehr und mit datenbank kenn ich mcih sowieso nicht aus:D

Ich zähle auf eure Hilfe;)

LG

Fipsi

2

Wednesday, March 23rd 2011, 5:27pm

Mistiger HTML-Code und für SQL-Injection offener Query. Niemals einfach Daten in einen Query tun. Vorher immer Escapen.
Hast du dir mal angeguckt, ob und wenn was in $row drin ist? Oder hast du mal versucht den Query mit eingesetzten Namen im PHPmyAdmin auszuführen?

3

Wednesday, March 23rd 2011, 5:29pm

wie ich schon sagte:
Ich hab von MySQl keinen Plan... und deshalb is das, was du da sagst fachchinesisch für mich:D

4

Wednesday, March 23rd 2011, 6:16pm

Also grundsätzlich gibt es ein paar Sicherheitslücken in deinem Script. Auf die können wir später noch eingehen.

Ich denke mal du hast das Passwort in der MySQL Datenbank direkt reingeschrieben? Also in der Zeile, in der z.B. der Benutzer test steht, wird auch direkt das Passwort "test" stehen. In der MySQL Datenbank muss das Passwort natürlich auch verschlüsselt (in diesem Fall mit md5) hinterlegt werden)

5

Wednesday, March 23rd 2011, 8:19pm

das hab ich bereits getan.
Hie rmal ein Screenshot:


6

Wednesday, March 23rd 2011, 9:52pm

Das ist die korrekte Codierung mit md5.
Aber wie gesagt: was bekommst du mit

PHP Quellcode

1
print_r($row);
angezeigt, wenn du dich mit den korrekten Daten einloggst?

7

Thursday, March 24th 2011, 3:05pm

nur das hier:
Benutzername und/oder Passwort waren falsch. Login

Was mir aber selber heut in der Schule eingefallen ist:
Muss ich vllt. irgendwo den Tabellennamen hinterlegen?

8

Thursday, March 24th 2011, 5:13pm

Heißt deine Tabelle nicht "login"? o.O

9

Thursday, March 24th 2011, 5:14pm

nein, die heißt "Teamecke-login"

kann mir jemand sagen, was ich dann verändern muss? das einzigste mit login im code war das heir:

PHP Quellcode

1
$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";


habs schon ausgetauscht, das "login", mit "Teamecke-login", aber das funzt auch nicht...

Edit: war schon das... hab ne neue Tabelle mit nem anderem Namen gemacht (teamecke_login), der ging...
also das hat sich erledigt...
Allerdings hätte ich jez noch was anderes...

Und zwar hab ich linsk in der Navi stehen: "Logout []" und in den Klammern hätte ich gerne den Namen stehen...

This post has been edited 2 times, last edit by "Fipsi" (Mar 24th 2011, 5:40pm)


10

Thursday, March 24th 2011, 5:56pm

PHP Quellcode

1
<?php echo "Logout [".$_SESSION["username"]."]"; ?>

11

Thursday, March 24th 2011, 6:06pm

achso, also immer wenn ich was aus der Datenbank sehen will

PHP Quellcode

1
echo 'bla ' . $_SESSION['[..]'] . ' bla';


Und wie kann ich das machen, dass wenn ich auf logout wirklich ausgeloggt werd? weil ich habs ausprobiert: ich konnte wieder so rein...

ich hab die seite so:

PHP Quellcode

1
2
3
4
5
6
7
8
9
<?php
 session_start(); 
 [...]
 if(!isset($_SESSION["email_adresse"]))
   {
   echo 'Bitte erst <a href="login.html">einloggen</a>';
   exit;
   } 
?>

12

Thursday, March 24th 2011, 6:14pm

Ich weiss nicht genau was du da machst, aber du solltest dir erstmal ein Tutorial angucken.

Learning by doing ist gut, aber ohne Grundlage bringt dich das 0 vorran !

13

Thursday, March 24th 2011, 6:17pm

hm... ok... ehrlich gesagt, hab ich bisher fast nur so gelernt^^

na ja... dann setz ich mich mal an ein tutorial... mal gucken, vllt. find ich ja eins, mit dem ich weit komm... hatte schon eins, aber da war ich ziemlich shcnell draußen...

Edit:

ich seh gerade:
Wenn cih mit Benutzername Fipsi einlogge kommt aber der username "test" ($_SESSION["username"), auch wenn ich mich als jemand anderer eingeloggt habe...

This post has been edited 1 times, last edit by "Fipsi" (Mar 24th 2011, 6:24pm)


14

Thursday, March 24th 2011, 7:37pm

Wenn du dich ausloggen willst dann musst du die Session zurücksetzen mit unset.
Und nein $_SESSION liest Sachen aus der Session aus und nicht aus der Datenbank ;)

Für Datenbank-Abfragen brauchst du sowas zB.

PHP Quellcode

1
2
3
4
5
$sql = "SELECT * FROM BLA";
$sql = mysql_query($sql);
$row = mysql_fetch_object($sql);
 
echo $row->tabellen_spalte;


Eine Art Sachen auszulesen.
Schau dir am besten MySQL Abfragen an .. Dort gibt es auch eine andere Möglichkeit anstatt mysql_fetch_object(); zu benutzen.

Learning by doing ist das beste ;) Auch wenn man 0 Ahnung hat.
Google hilft ;)


Links:

http://php.net/manual/en/function.unset.php
http://www.selfphp.info/forum/showthread.php?t=13544
http://www.schattenbaum.net/php/abfrage.php

16

Friday, March 25th 2011, 8:52am

Wegen der Sicherheit solltest du deine MySQL Abfrage auch immer wie folgt umbauen:

PHP Quellcode

1
$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '".mysql_real_escape_string($username)."' LIMIT 1";


Alle Variabeln, die du in deinen Abfrage verwendest musst du parsen. Okay alle muss man nicht, aber es schadet nicht, wenn du das einfach schon aus Gewohnheit so machst. Bei Zahlenwerten verwendest du intval() und bei Strings etc. immer mysql_real_escape_string()

This post has been edited 1 times, last edit by "Szabo" (Mar 25th 2011, 1:28pm)


17

Friday, March 25th 2011, 10:31am

Ich verbessere mal eben den "Vorschreiber".

Die Abfrage muss natürlich so aussehen :)

PHP Quellcode

1
$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '".mysql_real_escape_string($username)."' LIMIT 1";


Im Satz darunter Stand es ja schon richtig ;)

18

Friday, March 25th 2011, 1:29pm

Oh ja, danke - im halbschlaf hat das Denken noch nicht so richtig funktioniert :-D

19

Sunday, March 27th 2011, 5:57pm

Quoted

PHP Quellcode

1
2
3
4
5
6
$username = $_POST["username"];
$passwort = md5($_POST["password"]);
 
$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
Mich würde eher interessieren was die Suche "LIKE" in der Abfrage zu suchen hat. Benutzername und Passwörter sind doch ehh eindeutig und sollten nicht geschut werden. Im weiteren fehlen die %-WildCards um einer Suche noch den letzten Schliff zu geben. Aber das würde bedeuten, das alle Usernamen die z.B. den Namen Test enthalten, in betracht kämen. Bei deinem derzeitigen Script könnte es dazu führen, das der Member sich garnicht erst einloggen kann, da ja auf 1 Eintrag der db, der das Wort Test im Namen enthält, limitiert wird.

Im zweiten Ansatz, halte ich es für unnütz, das Passwort nachträglich auf Richtigkeit zu prüfen. Mit einfachen Mitteln kann man die Datenbank selber benuzten, um das Passwort zu validieren und somit den Benutzer zu verifizieren.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Eingaben einlesen und direkt escapen, so das keine Injections durchgeführt werden können
 
 $username = mysql_real_escape_string($_POST["username"]);
$passwort = md5(mysql_real_escape_string($_POST["password"]));
 
//anschließend die Datenbank fragen
$abfrage = mysql_query("SELECT * FROM login WHERE username = '".$username."' AND passwort = '".$passwort."' LIMIT 1");
 
//Wenn man $abfrage nun auf Inhalt prüft (treffer zählen), kann entweder nur 0 oder 1 raus kommen. Diese werte sind mit False und True gleich zu stellen. 
//True ist $abfrage nur, wenn in der Datenbank, der Benutzername zusammen mit dem Passwort gefunden werden konnte. Ansonsten ist $abfrage immer false (leer)
 
If (mysql_num_rows($abfrage))
 	echo "Login erfolgreich";
else
	echo "Username und/oder Passwort falsch!";



So long
CoPyMaus

This post has been edited 1 times, last edit by "CoPyMaus" (Mar 27th 2011, 6:11pm)


20

Sunday, March 27th 2011, 7:08pm

Die getrennte Abfrage nach dem Passwort macht schon Sinn, da du so zwei verschiedene Fehlermledungen geneieren kannst.

Wenn du nach Benutzername & Passwort fragst, bekommst du entweder einen Datensatz oder eben nicht. Fragst du zu erst den Benutzer ab und bekommst keinen Datensatz, dann ist der Benutzername falsch. Bekommst du deinen Datensatz und das Passswort stimmt nicht überein, dann ist nur das eingegebene Passwort falsch, der Nutzer aber vorhanden. Macht also schon Sinn :)

Similar threads

Social bookmarks