1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Admin Bereich erstellen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Grawapple, 29.03.07.

  1. Grawapple

    Grawapple Uelzener Rambour

    Dabei seit:
    13.05.06
    Beiträge:
    373
    Hallo zusammen
    Ich möchte einen eigenen Admin-Bereich erstellen.
    Dafür möchte ich verschiedene Benutzer erstellen. Kann mir vieleicht jemand sagen, wie ich machen kann, dass das skript überprüft ob dieser name mit diesem passwort vorhanden ist und dann weiterleitet?

    Warte auf Antworten

    Grawapple
     
  2. Nighthawk

    Nighthawk Linsenhofener Sämling

    Dabei seit:
    16.12.06
    Beiträge:
    2.558
  3. .holger

    .holger Geflammter Kardinal

    Dabei seit:
    13.09.04
    Beiträge:
    9.117
    Ganz einfach:

    Du legst eine MySQL Tabelle mit den benutzern und das (am besten md5 verschlüsselte) Passwort.

    Dann nimmst Du ein Formular, dort lässt Du von Benutzer die Daten eintragen, dieses Formular leitet auf die Prüfung, in der Du guckst ob Benutzername und (verschlüsseltes) Passwort vorkommen, vergibst eine SessionID, Benutzername und ID in der Session und dann wird im Adminbereich auf jeder Seite geguckt ob die SessionID, der Name und die ID mit den Daten in der Datenbank übereinstimmen, nur dann wird die Seite ausgegeben.

    Ganz einfach.
     
  4. Grawapple

    Grawapple Uelzener Rambour

    Dabei seit:
    13.05.06
    Beiträge:
    373
    Alles klar
    Bis auf die erste überprüfung mit der mysql abfrage.

    Grawapple
     
  5. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Eigentlich solltest Du nur prüfen, ob ein Benuztername schon vorhanden ist. Und wenn Du den Benuzernamen "unique" machst, dann solltest Du einen fehler bekommen, wenn jemand versucht sich mit dem gleichen namen zu registrieren.
     
  6. wapplegraph

    wapplegraph Normande

    Dabei seit:
    12.04.06
    Beiträge:
    571
    Jawohl, doch an dieser Stelle habe ich eine Frage. Das überprüfen, würde ich jetzt mit preg_match() machen, doch ich weiss, dass dies sicherlich nicht die beste und MySQL freundlichste Methode ist. Wie löst man es besser?

    wapplegraph
     
  7. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    Code:
    $sql = "SELECT id FROM user WHERE LOWER(name) = LOWER('$name') and MD5(password) = MD5('$password')";
    $qry = mysql_query($sql);
    if(mysql_num_rows($qry) > 0) {
        // login ok
    } else {
        // login failed
    }
    gruss
    Jonathan
     
  8. wapplegraph

    wapplegraph Normande

    Dabei seit:
    12.04.06
    Beiträge:
    571
    Könnte mir dies noch jemand erläutern?


    danke wapplegraph
     
  9. Nighthawk

    Nighthawk Linsenhofener Sämling

    Dabei seit:
    16.12.06
    Beiträge:
    2.558
    Der fischt nen User mit den eingegebenen Daten aus der Datenbank (Username + Passwort). Findet er keinen User, stimmen also die eingegebenen Daten nicht.
     
  10. wapplegraph

    wapplegraph Normande

    Dabei seit:
    12.04.06
    Beiträge:
    571
    Wow

    Ja aber ich möchte es MySQL mässig verstehen, also die Befehle.

    wapplegraph
     
  11. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Diese Form sollte man so wie hier nie verwenden und auch besser nicht veröffentlichen, denn diese Schreibweise enthält ernstzunehmende Sicherheitsprobleme, doch das sei hier nicht Gegenstand.

    Ich erlaube mir also, das ganze ein wenig umzuschreiben:

    Code:
    <php
    
        $sql = "SELECT id ";
        $sql .= "FROM user ";
        $sql .= sprintf("WHERE LOWER(name) = LOWER('%') ", mysql_real_escape_string($name));
        $sql .= sprintf("AND MD5(password) = MD5('%s')", mysql_real_escape_string($password));
        $sql .= "LIMIT 1";
    ?>
    
    Zusätzlich sorgt hier die Ergebnismengenbegrenzung "LIMIT 1" dafür, dass die Abfrage wesentlich schneller asugeführt werden kann.

    Klarer so?
     
  12. Hobbes_

    Hobbes_ Gast

    Vielen Dank für diesen Kommentar zur Sicherheit!!

    Ein Problem zahlreicher selbstgestrickter PHP/MySQL-Anwendungen im Netz ist die fehlende Kontrolle bezüglich der Benutzereingaben. Dies kommt häufig davon, dass einfach die Beispiele, die zur Illustration einer Technik vereinfacht veröffentlicht wurden (siehe auch http://www.php.net ) einfach 1:1 in reale Programme übernommen werden...

    Leider ist es so, dass nicht nur versehentliche fehlerhafte Benutzereingaben abgefangen werden müssen, sondern auch echt auf Schädigung des Systems ausgelegte Eingaben. Da macht man sich gelegentlich keine Vorstellungen, wie ein einfaches System ausgenutzt werden kann. Deshalb ist auch Dein Link super!

    Kurz: Programmierer von interaktiven Web-Seiten übernehmen eine grosse Verantwortung, da der Input, der irgendwie übers Netz zum Server kam, nicht vorhersehbar ist... Traue keinem Input, bis geprüft wurde, dass er genau einer valablen und sicheren Eingabe für diesen spezifischen Parameter entspricht (Typ, Range, Länge, Zeichenzusammenstellung, Escapen von Problemzeichen,...).
     
  13. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    $user und $password werden natuerlich vorher noch mittels mysql_real_escape string umgewandelt. Versteht sich von selbst.
     
  14. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    OKAY :p
     
  15. wapplegraph

    wapplegraph Normande

    Dabei seit:
    12.04.06
    Beiträge:
    571
    Hallo

    Was bedeutet genau: LOWER() & MD5() dies ist mir unklar.

    Danke wapplegraph
     
  16. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    LOWER() macht Buchstaben klein und MD5() wendet den Verschlüsselungsmechanismus »MD5« auf das jeweilige Argument an.

    Zu finden im MySQL-Handbuch. Tipp: Wenn Du die Dokumentation zu einem MySQL-Begriff suchst, kannst den Suchbegriff gleich als URL verwenden:
    Code:
    http://dev.mysql.com/LOWER
    http://dev.mysql.com/MD5
    
    Der gleiche Trick ist übrigens auch bei http://www.php.net/ oder http://de.php.net/ zu finden.
     
  17. wapplegraph

    wapplegraph Normande

    Dabei seit:
    12.04.06
    Beiträge:
    571
    Es gibt mir mit dieser eien Fehler aus:

    Code:
    	$sql = "SELECT ID ";
        $sql .= "FROM $tb_ses ";
        $sql .= sprintf("WHERE LOWER($ses_bn) = LOWER('%') ", mysql_real_escape_string($form_s_bn));
        $sql .= sprintf("AND MD5($ses_pwd) = MD5('%')", mysql_real_escape_string($form_s_pwd));
        $sql .= "LIMIT 1";
    	
    	$query = mysql_query($sql, $con);
    	
    	
    	
    	if($sub_admin == 'senden')
    	
    	{
    		if(mysql_num_rows($query) > 0)	
    

    Ist mysql_num_rows eine Falsche Abrage? Diese kenne ich eigentlich nicht.


    wapplegraph
     
  18. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Nein, aber Deine Abfrage ist seltsam. Ich glaube, Du hast die Verwendung von sprintf() noch nicht verstanden.

    Du schreibst:
    Code:
    $sql .= sprintf("WHERE LOWER($ses_bn) = LOWER('%') ", mysql_real_escape_string($form_s_bn));
    
    Liebe Kinder, schaut Euch das nicht ab. Einerseits gehört hinter das Prozentzeichen noch der Wertetyp, der eingesetzt wird also 's' für Zeichenkette (string), 'd' für eine ganze Zahl, 'u' für einen Betrag, usw. In diesem Fall muss es zu '%s' zusammengezogen werden.

    Und: sprintf() hat in diesem Zusammenhang den Sinn, dass man nicht Ausgabe und PHP-Variablen wild mischt, wie hier:
    Code:
    sprintf("WHERE LOWER($ses_bn) ...
    
    Auch diesen Wert bitte durch ein %s und einfache Anführungszeichen erstetzen. Richtig ist also:

    Code:
    $sql .= sprintf("WHERE LOWER('%s') = LOWER('%s') ", mysql_real_escape_string($ses_bn), mysql_real_escape_string($form_s_bn));
    
    Und noch ein Tipp: Sprechende Variablennamen sind echt cool, 'ses_bn' oder 'form_s_bn' sind es jedoch nicht, wenn man nach einem Jahr noch einen Blick drauf werfen möchte ;)
     
  19. b0rsten

    b0rsten Gast

    ihr wollt doch nicht allen ernstes das passwort unverschlüsselt in der datenbank speichern?
     
    1 Person gefällt das.
  20. wapplegraph

    wapplegraph Normande

    Dabei seit:
    12.04.06
    Beiträge:
    571
    Im Moment ist alles nur zum Testen
     

Diese Seite empfehlen