Hilfe beim "Login-System"

Kalma

Erfahrenes Mitglied
Hey Leutz,

ich habe ein Problem mit meinem Login-system auf einer Fanpage.

Wenn ihr euch mal folgendes anschaut:

http://olsen.dfmusik.de/index.php?section=login
Wenn ihr euch da mit folgenden Daten einloggt:
Nickname: test
Passwort: test

Eigentlich sollten sich folgende Menu-punkte umändern:
Einloggen · Registrieren >> Ausloggen


Hier meine Scripte:
login.php:
PHP:
<?php 
$nickname	= $_POST['nickname'];
$passwort	= $_POST['passwort'];

$Query = "SELECT ". 
          "*". 
 	     "FROM ". 
          "user ". 
 	     "WHERE ". 
         "(nickname like '$nickname') 
 	     AND ". 
         "(passwort like '$passwort')"; 
	
$Result = mysql_query ($Query); 

if (mysql_num_rows ($Result) > 0) 
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($Result); 

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] 			= $data["id"]; 
  $_SESSION["nickname"] 	    = $data["nickname"]; 
  $_SESSION["email"]			= $data["email"];
  

  header ("Location: ?section=index");
} 
else 
{ 
  header ("Location: ?section=login&fehler=1");
} 
?>

menu.php
PHP:
<a href="?section=index">Home</a> 
 &middot;
<a href="?section=news">News</a>
 &middot;
<a href="?section=bio">Biography</a>
 &middot;
<a href="?section=links">Links</a>
 &middot;
<a href="?section=active">Active</a>
 &middot;
<a href="?section=stuff">Cool Stuff</a>
 &middot;
<a href="?section=community">Community</a>
 &middot;
<?php
if (!isset ($_SESSION["user_id"])) 
{
echo " <a href=\"?section=login\">Einloggen</a> ";
echo " &middot; ";
echo " <a href=\"?section=register\">Registrieren</a> ";
} else {
echo " <a href=\"?section=logout\">Ausloggen</a> ";
}
?>
<hr />



Ich werde jetzt ganz geduldig warten, bis mir jemand hilft :)

David
 
Das hat jetzt zwar nichts mit deinem Problem direkt zu tun, ist aber dennoch sehr wichtig!

Wenn ich das richtig sehe, wird das Passwort im Klartext in der Datenbank gespeichert?
Falls das der Fall sein sollte, müsstest du das schnell ändern.

Und außerdem solltest du in der Datenbank-Abfrage nicht 'LIKE' sondern '=' benutzen.

greetz
daddz
 
Die funktion session_start(); ist schon was schönes was jedoch bei dir fehlt, was heisst das die session garnet existiert und er netmal weiss das du loggen bist...
 
Zuletzt bearbeitet:
Hallo!
daddz hat gesagt.:
Und außerdem solltest du in der Datenbank-Abfrage nicht 'LIKE' sondern '=' benutzen.
Kommt gut wenn man sich auch ohne Benutzername/Passwort einlogen kann. ^^

Ausserdem fehlt der Schutz vor einer SQL-Injection.
PHP:
$Query = "SELECT  
          * 
          FROM  
          `user`  
          WHERE  
          `nickname` = '".mysql_real_escape_string($nickname)."'  
          AND  
          `passwort` = '".mysql_real_escape_string($passwort)."';";
Irgendwie übersichtlicher. ;)

Die Datei heisst wirklich "login.php"?
Dann frage ich mich wie das Formular es schafft die Daten dorthin zu schicken.

Und wo prüfst Du überhaupt ob das Formular abgeschickt wurde?

session_start() wurde ja schon genannt. ;)

Gruss Dr Dau
 
Jetzt, wo ihr's sagt, fällts mir ein :-O
Das
PHP:
session_start();
fehlt natürlich :-)
Wie konnte ich das vergessen...

Noch eine Frage::offtopic:
Mein Server wurde gehackt, 6 datenbanken, ca. 100 tabellen wurden gelöscht.
Sollte ich den Anbieter wechseln oder nicht? Das ist jetzt schon das 2. Mal :suspekt:


MfG
David
 
Dennis Wronka hat gesagt.:
Wenn das Problem bei Deinen Scripts liegt wird ein Umzug nicht helfen.

Das dachte ich mir schon.
Spaß bei Seite^^
Nein, heute morgen wollte ich auf meinen Seiten vorbeischauen, und was war? Alle Seiten wurden von meinem conifxx aus auf porno-seiten umgeleitet, subdomains wurden gelöscht, alle datenbanken waren weg usw. usw

David
 
Deine Passwörter hast Du dann ja bestimmt schon geändert.....
Ich würde mal in die Logfiles vom Webserver und vom System gucken..... evtl. kann man daraus schon etwas erkennen.

Und wie Dennis schon sagt, es kann auch an Deinen Scripten liegen..... wie z.b. mit der schon genannten SQL-Injection.

Hinzu kommt noch Dein LIKE..... und schon konnte ich mich ohne Benutzername/Passwort einlogen.
LIKE dient als Zeichenketten-Vergleichsfunktion.
Vor LIKE kommt der String mit dem verglichen werden soll (in Deinem Fall alle Zeilen aus der Spalte "nickname" bzw. "passwort").
Nach LIKE kommt der String nach dem gesucht werden soll.
Da man das %-Zeichen als Ersatzzeichen für jedes beliebige Zeichen nutzen kann, brauchte ich als Benutzername und Passwort also lediglich das %-Zeichen eingeben.
Und schon wurde in den Spalten "nickname" und "passwort" nach irgend einem beliebigen Zeichen gesucht.
Nun sind in einer Benutzerverwaltung natürlich auch irgend welche Benutzer eingetragen (welch Wunder ;) ), was dann dazu geführt hat dass auch irgend ein beliebiges Zeichen gefunden wurde.
Zwangläufig musste mein Login also auch ohne einem mir bekannten Usernamen/Passwort gelingen. ;)

LIKE könnte bei einer Suchfunktion ganz nützlich sein..... da aber bei einem Login nicht zu erwarten ist dass der User nur einen Teil seines Usernamens und/oder Passworts eingibt, kannst Du getrost auf LIKE verzichten. ;)
 

Neue Beiträge

Zurück