Announcement

Collapse
No announcement yet.

Login System

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Login System

    Hi Community,

    bin noch Anfänger in PHP und MySQL und bin gerade Fertig geworden mit einem Einstiegs PHP MYSQL Kurs 7 Stündig.
    Habe auch schon einige Sachen ausprobiert mit Schleifen zu arbeiten Variablen Berechnungen alles wunderbar.

    Nun bin ich dabei ein Kleines Login System per PHP und MySQL zu bauen.

    Läuft auch alles wunderbar bis zu dem Punkt wo Username und Passwort überprüft werden.

    Fehlermeldung:
    Notice: Object of class mysqli_result could not be converted to int in PFAD on line 71
    Code:

    PHP Code:
                            $username mysql_real_escape_string($_POST['Username']);
                            
    $password mysql_real_escape_string($_POST['Password']);
                            
    $login $mysqli->query("SELECT user, pass FROM user
                            WHERE user='
    $username' and pass='$password'");
                            if(
    $login != 0// ZEILE 71
                            
    {
                                echo 
    "Login erfolgreich";
                            }
                            else
                            {
                            } 

  • #2
    Der Rückgabewert ist ein

    http://www.php.net/manual/de/class.mysqli-result.php

    Prüfe das mit

    http://php.net/manual/de/function.empty.php

    if (!empty($login))
    Christian

    Comment


    • #3
      Danke für die schnelle Antwort ich habe auch bereits eine lösung gefunden.

      Habe den If kopf durch denn ersetzt jetzt meine Frage: Wie sieht es dabei mit der Sicherheit aus? Ist das so Ok?

      EDIT: Denn ich bin mir nicht so sicher mit dem
      PHP Code:
      mysql_real_escape_string(); 
      weil ich bin der Meinung der ist nur für SQL und man müsste es jetzt so per
      PHP Code:
      htmlspecialchars(); 
      PHP Code:
                              $username mysql_real_escape_string($_POST['Username']);
                              
      $password mysql_real_escape_string($_POST['Password']);
                              
      $login $mysqli->query("SELECT user, pass FROM user");
                              
      $ergebniss mysqli_fetch_object($login);
                              if(
      $username == $ergebniss->user)
                              {
                                  if(
      $password == $ergebniss->pass)
                                  { 
      // UND SO WEITER 

      Comment


      • #4
        Ich verstehe die Anschlussfrage nicht
        Christian

        Comment


        • #5
          naja ob ich diesen Teil

          PHP Code:
                                  $username mysql_real_escape_string($_POST['Username']);
                                  
          $password mysql_real_escape_string($_POST['Password']); 
          mit

          PHP Code:
          htmlspecialchars(); 
          verarbeiten muss.

          EDIT: Oder ob das so Ok ist von der Sicherheit her.

          MfG

          Comment


          • #6
            Ändert nichts

            http://www.php.net/manual/de/functio...ecialchars.php
            Ich weiß nicht, was das mit der Frage zu tun hat

            Wenn du meinst es tun zu müssen, dann tu es
            Zuletzt editiert von Christian Marquardt; 15.01.2014, 19:25.
            Christian

            Comment


            • #7
              Hallo,
              Originally posted by stevy2651 View Post
              ...bin noch Anfänger in PHP und MySQL und bin gerade Fertig geworden mit einem Einstiegs PHP MYSQL Kurs ... Nun bin ich dabei ein Kleines Login System per PHP und MySQL zu bauen.
              Warum neigen eigentlich alle Anfänger dazu, als erste Aufgabe ein Login-System realisieren zu müssen? Zum Ersten gibt es bereits einige gute Frameworks, die einem das abnehmen und zum Zweiten ist es eben keine triviale Aufgabe wenn man Sicherheit entsprechend hoch Priorisiert.
              Aber OK, wenn du schon nach Sicherheit fragst ...
              PHP Code:
              $username mysql_real_escape_string($_POST['Username']);
              $password mysql_real_escape_string($_POST['Password']);
              $login $mysqli->query("SELECT user, pass FROM user"); 
              mysql_real_escape_string ist eine MySQL-Funktion, anschließend machst du jedoch mit MySQLi im objektorientierten Stil weiter. Das ist Murks!
              Also besser wäre schonmal die entsprechende MySQLi-Funktion zu verwenden:
              PHP Code:
              $username $mysqli->real_escape_string($_POST['Username']); 
              Noch besser wäre natürlich mit MySQLi auch Prepared Statements und Parametrisierung einzusetzen. Damit ist man die Sorgen um SQL-Injection am Besten los.
              Dann ist es unter dem Aspekt der Sicherheit keine gute Idee, Passwörter im Klartext zu speichern und zu vergleichen. Gängiges Verfahren ist hier die Bildung eines Hashwertes - z.B. ein MD5 oder ein SHA1. In der DB wird dann nur der Hash-Wert gespeichert, so dass selbst Personen mit Zugriff auf die DB nicht die Passwörter der Nutzer auslesen können. Der Vergleich findet dann nur mit den Hash-Werten statt.

              Ansonsten funktioniert
              PHP Code:
              $login $mysqli->query("SELECT user, pass FROM user");
              $ergebniss mysqli_fetch_object($login);
              if(
              $username == $ergebniss->user
              nur, wenn es nur einen einzigen User in der DB gibt. Verglichen wird hier immer nur mit dem ersten Datensatz der zufällig gefunden wird. In der Abfrage fehlt schlicht die WHERE-Klausel.
              Ansonsten wäre zum Thema Sicherheit noch die fehlende Validierung der Eingaben zu nennen. Schließlich wurde vor die Maskierung die Validierung gesetzt.

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment

              Working...
              X