0251 / 590 837 15
info@a-coding-project.de
;

Admin Passwort prüfen & User Klasse erstellen

Code & Blog Logo

Code & Blog Logo

Das Login-Formular für den Admin ist fertig. Der Admin ist auch schon in der Datenbank angelegt. Fürs Login fehlt also nur noch das Passwort zu Prüfen und den User als eingeloggt zu markieren. Heute werden wir erstmal das Passwort prüfen.

Hierfür gibt es eine neue Klasse in system/classes: Die Klasse User (Datei user.php). Sie heißt nicht Admin, damit sie später evtl. zu einem Login-System für alle Benutzer umgestellt werden kann. In der ersten Version des CMS soll es aber lediglich für den Admin sein.

Die Klasse hat die Property name, in welcher der Benutzername festgelegt wird. Die Methode checkPassword, prüft ob das übergebene Passwort korrekt ist:

<?PHP
class User{
  var $name;

  function checkPassword($password){
    global $dbpraefix;
    $password = mysql_real_escape_string(trim($password));
    $name = mysql_real_escape_string(trim($this->name));
    $res = mysql_query("SELECT COUNT(*) FROM ".$dbpraefix."user WHERE 
                        name='".$name."' AND password = '".md5($password)."'");
    $row = mysql_fetch_row($res);
    return $row[0] == 1;
  }
}
?>

Als erstes werden in der Methode die äußeren Leerzeichen von Usernamen und Passwort entfernt. Mit mysql_real_escape_string wird verhindert, dass ein Hacker sich mit einer SQL-Injection Zugriff zur Datenbank verschaffen kann. Danach wird einfach nachgesehen, ob ein Datensatz mit dem Usernamen und dem MD5 Hash vorhanden ist. Zurückgegeben wird true, wenn ein Datensatz vorhanden ist. Anderenfalls gibt es ein false.

Um die Methode zu testen, wird im Login-Formular des Admin(admin/index.php) einfach nur getestet, ob das eingegebene Passwort korrekt ist:

<?PHP
  include("../system/dbconnect.php");
  include("../system/settings.php");
  include("../system/classes/user.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml/" xml:lang="de">
  <head>
    <title>Admin-Bereich</title>
  </head>
  <body>
      <?PHP
        if($_POST['user']){
          $user = new User();
          $user->name = $_POST['user'];
          if($user->checkPassword($_POST['password'])){
            echo "<p>Passwort korrekt!</p>";
          }
          else{
            echo "<p>Falsches Passwort!</p>";
          }
        }
      ?>
      <form action="index.php" method="post">
        Benutzer: <input name="user" /><br />
        Passwort: <input name="password" type="password"><br />
        <input type="submit" value="Login" />
      </form>
  </body>
</html>

Es mussten oben zwei zusätzliche Includes ergänzt werden, um Datenbankzugriff zu haben. Der letzte Include ist für die Klasse User, die wir eben erstellt haben.

Sollte alles geklappt haben, könnt ihr nun die Seite aufrufen, und testen, ob euer Passwort korrekt ist. Bei meiner Seite ist das Formular hier:

http://cms.stevieswebsite.de/admin/

Kommentare

Sven schrieb am 15.08.2011:

Um einen unerwünschten Notice zu vermeiden würde ich noch isset in die if bedingung einfügen also: if(isset($_POST['user']))... ... ... MfG

Stefan Wienströer schrieb am 16.08.2011:

Da muss ich dir Recht geben. Wurde später auch so geändert ;-)

Maximilian schrieb am 28.09.2011:

Super Tutorial, aber da ist ein Druckfehler. Ich denke es soll nicht SQL-Injedktion sondern SQL-Injektion heißen.

Stefan Wienströer schrieb am 29.09.2011:

Ups^^ Habs geändert.