Neuigkeiten:

still alive...

Hauptmenü

Login mit Adminrechte

Begonnen von adriano, 18. Juni 2007, 14:26:43

Vorheriges Thema - Nächstes Thema

adriano

Hallo zusammen,
ich habe folgendes Problem. Habe eine Webseite erstellt, bei der man sich einloggen kann. Dies funktioniert auch alles.
Die Benutzerverwaltung habe ich in einer MySQL Datenbank abgelegt. In dieser gibt es eine Spalte \"recht\" die mit \"admin\" oder \"benutzer\" belegt ist.
Ich möchte gerne beim Login darauf prüfen ob derjenige, der sich einloggt ein \"admin\" oder \"benutzer\" ist. Da ein \"admin\" mehr Funktionen später haben soll.
Wie schon gesagt das normale Login funktioniert. Könnte mir jemand sagen, was ich am unteren Quellcode ändern muss, dass das Login noch unterscheidet zwischen \"admin\" und \"benutzer\"
Formular:

 
 

     Benutzername:
 
 

     Passwort:
 
 
 
        Login  
        Eingabe löschen
 
 

 
Überprüfung:

session_start();
include \'../../anwendungskern/benutzerverwaltung.php\';
 
if (isset($_POST[\'login\']))
{
   $id=check_user($_POST[\'username\'], $_POST[\'password\']);
   if ($id!=false)
   {
       login($id);
   }
   else
   {
        include \'./../seiten/login_false.php\';
   }
}
if (!logged_in())
{
  include \'./../seiten/login_false.php\';
}  
else
{
   include \'./../seiten/logged_in.php\';
}

 
Funktion:

function check_user($username, $password, $recht)
{
   $sql=\"SELECT id
   FROM benutzer  
   WHERE username=\'\".$username.\"\' AND password=MD5(\'\".$password.\"\')
   LIMIT 1\";
   $result= mysql_query($sql) or die(mysql_error());
   if ( mysql_num_rows($result)==1)
   {
       $benutzer=mysql_fetch_assoc($result);
       return $benutzer[\'id\'];
   }
   else
   {
       return false;
   }
}
 
 
function login($id)
{
   $sql=\"UPDATE benutzer
   SET session=\'\".session_id().\"\'
   WHERE id=\".$id;
    mysql_query($sql);
}
 
function logged_in()
{
   $sql=\"SELECT id
   FROM benutzer
   WHERE session=\'\".session_id().\"\'
   LIMIT 1\";
   $result= mysql_query($sql);
     return ( mysql_num_rows($result)==1);
}

 
Vielen Dank im Voraus.
Gruß
Nano

k00ni

Hallo,
also mal der Reihe nach:
Das hier
 

id\"password\">

 
 
zu dem hier
 

id=\"password\">

 
 
Das hier
 


wahrscheinlich zu dem hier


 
 
Soweit ich sehe, ist die Funktion check_user für die Erfassung der Userdaten zuständig. Lass dir dort in dem SQL-Statement auch den Userrang ausgeben. Warum du dort aber auch $recht übergibst, weiß ich nicht und ich kann davon nichts in der Funktion finden. Du willst es doch erst herausfinden. Denkbar wäre zu prüfen, ob es die Kombination Username/Passwort/Recht gibt.
 

function check_user($username, $password, $recht)
{
$sql=\"SELECT id
FROM benutzer
WHERE username=\'\".$username.\"\' AND password=MD5(\'\".$password.\"\')
LIMIT 1\";
$result= mysql_query($sql) or die(mysql_error());
if ( mysql_num_rows($result)==1)
{
$benutzer=mysql_fetch_assoc($result);
return $benutzer[\'id\'];
}
else
{
return false;
}
}

 
 
Du brauchst also diese Zeile SELECT id, nur um die Spalte für das Recht erweitern. Zudem solltest du dir nicht nur die ID zurückschicken lassen, um dann später zu prüfen, ob die Userdaten ok waren. Sondern lass dir gleich den User und seine Daten zurückschicken, also als Array. Genauso wird das über das pSys hier auch gelöst.
Dazu änderst du folgende Zeile
 

return $benutzer[\'id\']; 

 
 
in diese hier
 

return $benutzer; 

 
 
Was diese Funktion hier
 

function logged_in()
{
$sql=\"SELECT id
FROM benutzer
WHERE session=\'\".session_id().\"\'
LIMIT 1\";
$result= mysql_query($sql);
return ( mysql_num_rows($result)==1);
}

 
 
bringt weiß ich nicht. Lässt du dir da die Anzahl der Datensätze zurückschicken? Könnte man denken, aber was soll diese Zeile hier return ( mysql_num_rows($result)==1); bringen?
 
Anmerkung zu einem Loginsystem:
Es ist erstens wichtig, dass du niemals den Eingaben deiner Benutzer traust. Loginsysteme sind vielfach die erste Anlaufstelle für Angriffe. Deshalb prüfen mit verschiedensten Funktionen die Eingaben. Beispielsweise Maskierung von Sonderzeichen, entfernen von PHP und HTML Code etc.
Weiterhin benötigst du nur 2 Funktionen. Eine, die dir Daten der Benutzer bereinigt und eine, die prüft ob er die richtigen Daten eingetragen hat und ihm dann bspw. einen Cookie setzt oder für ihn Sessiondaten ablegt. Weiterhin solltest du nicht in if-Anweisungen, je nach Fall, eine andere Datei inkludieren, dass erhöht die Verwirrung für dich und lässt dich mehr Fehler machen.
Wenn du eine gute Vorlage suchst, dann schaue dir mal das pSys oder andere pSkripte hier auf der Homepage an. Zum Abkucken ideal.  /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
[edit]Noch eine Anmerkung, da dies vielleicht etwas untergegangen ist. Mit dem Aufruf der Login-Funktion, kannst du den Return, also bei einem Erfolgsfall, das Userarray mit den Daten irgendwo speichern und dann per if-Anweisung $Arrayname [\'Name_fuer_die_Spalte_Recht\'] prüfen, ob da Admin, Benutzer oder was weiß ich, drin steht.[/edit]

all your base are belong to us / Discord