Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Anfänger Fragen zu registrier / login Script + Sicherheit

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Anfänger Fragen zu registrier / login Script + Sicherheit

    Hallo Gemeinde ^^

    Ich bastel gerade an einer Registrierung und bin schon ziemlich weit, nun geht es darum, daß ich die Usereingaben mit der Datenbank abgleiche, damit sich nicht die gleichen Daten mehrmals registrieren können.

    Und genau da hänge ich gerade fest, da ich wohl meinen SQL Befehl falsch habe, habe schon rumprobiert aber finde den Fehler einfach nicht.
    Und keine Sorgen, die Daten gehen natürlich nicht ungefiltert in die Datenbank, habe im voraus schon alle $_POST und $_GET über die config.php gereinigt ^^

    Nachdem dann überprüft wurde, ob die beiden Passwörter übereinstimmen, sollen die Daten auf der Datenbank abgeglichen werden

    PHP-Code:
    if ($_POST['passwort1'] == $_POST['passwort2'])
    {
      
    // Hier liegt der Fehler 
      
    $check_query $db_connect->query("SELECT `username` `passwort` `email` FROM user_tabelle WHERE ('username' , 'passwort' , 'email') =
                     ('"
    .$_POST['username']."' , '".$_POST['passwort']."' , '".$_POST['email']."' )");

        
    $user_check $check_query->num_rows;


        if (
    $user_check 0)
        {
            echo 
    "Es gibt bereits eine Regestration mit diesen Daten";
        }
        else
        {
            echo 
    "Mit diesen Daten wurde sich noch nicht registriert";
        }

    }
    else
    {
        
    $error_msg "Die eingegebenen Pässwörter stimmen nicht überein !";
        return;

    ... ich wäre euch sehr dankbar, wenn ihr mir zeigen könnt, wie ich mehrere abfragen in einer SQL realisieren kann , wenn ich nur 1 davon nehme

    also z.b

    PHP-Code:
    $check_query $db_connect->query("SELECT username FROM user_tabelle WHERE username = ('".$_POST['username']."')"); 
    Dann wird es mir auch richtig ausgeführt, nur will ich jetzt nicht alles einzeln prüfen wollen.

    Wäre euch sehr dankbar, wenn ihr mir bei diesem Problem helfen könntet

    MFG


  • #2
    http://php-de.github.io/jumpto/sql/
    lass dir mal die query ausgeben, ich gaub da stimmt was nicht.
    //OT:
    email ist mE de einzige als unique gemarkte teil bei benurtzeranmeldungen, ´üblicherweise gesehen. selbredet kann du da machen was du willst

    Kommentar


    • #3
      Zitat von Ascalon Beitrag anzeigen
      PHP-Code:
        $check_query $db_connect->query("SELECT `username` `passwort` `email` FROM user_tabelle WHERE ('username' , 'passwort' , 'email') =
                       ('"
      .$_POST['username']."' , '".$_POST['passwort']."' , '".$_POST['email']."' )"); 
      Die Syntax ist schlichtweg falsch.
      In der Feldliste fehlen die Kommata und die WHERE Bedingung ist nicht von dieser Welt
      Code:
      SELECT
        f1, f2, f3, ...
      FROM
        table
      WHERE
        f1 = 1 AND f2 = 3 AND f3 = 4
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        danke für eure antworten

        Zitat von lstegelitz Beitrag anzeigen
        Die Syntax ist schlichtweg falsch.
        In der Feldliste fehlen die Kommata und die WHERE Bedingung ist nicht von dieser Welt
        Code:
        SELECT
          f1, f2, f3, ...
        FROM
          table
        
        ------ Der obere Teil ist klar
        
        WHERE
          f1 = 1 AND f2 = 3 AND f3 = 4
        was meinst du nach dem WHERE f1 (feld 1 ) = 1 AND Feld 2 = 3 ? usw.

        Kommentar


        • #5
          Ich habe dein Query gequoted => dein WHERE ist schlichtweg falsch. Verlgeiche es mit meinem beispielhaften Query

          Schau auch mal im Grundlagenthread, dort sind Manuals und Tutorials verlinkt, die dir beim Lernen helfen.
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Wäre echt top, wenn man mir den Codeschnipsel eben korrigieren könnte, dann versteh ichs auch und weiß es für die Zukunft.

            Kommentar


            • #7
              Wäre top, wenn du das selber machen würdest... ich hab dir schon ziemlich deutlich aufgezeigt, wie du dein Query anpassen musst.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Würde es an die Performance gehen, wenn ich alles einzeln abfrage ( das funktioniert ja ) , da ich hier gerade nicht weiter komme, es aber gerne weiter machen will ?

                Kommentar


                • #9
                  Ein bischen Übertragungsleistung sollte schon drin sein...

                  Deine WHERE Bedingung (falsch)
                  Code:
                  WHERE ('username' , 'passwort' , 'email') = ('Hansi' , 'qwertz' , 'hansi@home.de' )
                  Meine WHERE Bedingung (richtig)
                  Code:
                  WHERE `username` = 'Hansi' AND `passwort` = 'qwertz' AND `email` = 'hansi@home.de'
                  edit: Grade noch gesehen... Feldnamen gehören nicht in Hochkommata (sondern in Backticks ``)
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Ah, jetzt hab ichs auch verstanden ^^ .. hab soviel varianten im Kopf, durch mein rumprobieren, daß ich da nicht drauf kam

                    .. Ich danke dir vielmals und werde es in meiner Rübe speichern ^^

                    Kommentar


                    • #11
                      Und bitte den Threadtitel ändern. Danke!

                      ein kleines problem für euch, ein großes für mich ^^
                      (Und woher du das weißt frage ich jetzt mal nicht)

                      http://www.php.de/php-einsteiger/464...verwenden.html

                      Ansonten:

                      Und deine query ist anfällig für SQL-Injection und falls du die mysql_ Erweiterung nutzt, die gibt es bald nicht mehr. Solltest du dir dringend noch ansehen, Stichwörter PDO, mysqli_

                      http://php-de.github.io/jumpto/sql-injection/
                      http://php.net/manual/en/migration55.deprecated.php

                      LG
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von hausl Beitrag anzeigen
                        Und bitte den Threadtitel ändern. Danke!


                        (Und woher du das weißt frage ich jetzt mal nicht)

                        http://www.php.de/php-einsteiger/464...verwenden.html

                        Ansonten:

                        Und deine query ist anfällig für SQL-Injection und falls du die mysql_ Erweiterung nutzt, die gibt es bald nicht mehr. Solltest du dir dringend noch ansehen, Stichwörter PDO, mysqli_

                        http://php-de.github.io/jumpto/sql-injection/
                        http://php.net/manual/en/migration55.deprecated.php

                        LG
                        huhu.. habe wie bereits schon erwähnt, daß ich mich schon über meine config.php gegen sämtliche sachen geschützt habe ( z.b. allgemein alles was $_POST angeht )

                        escapt, gegen xss geschützt und htmlspecialchars ist auch mit im schutz drin, wird aber auch ständig erweitert.
                        ich lasse sicher nix ungefiltert auf die datenbank zukommen aber danke für den hinweis doch das thema sicherheit, war mir direkt von anfang an sehr wichtig.

                        ich hatte mit mysql angefangen zu lernen, bis ich irgendwann erfahren habe, daß dies veraltet ist und seit dem bin ich auf mysqli unterwegs ^^

                        meine registration und login scripts funktionieren nun auch tadelos, bin stolz auf mich ^^.

                        stelle sie auch gerne mal zur veranschauligung hier rein und würde mich freuen, wenn ihr mir sagen würdet, ob das soweit sauber geschrieben ist:

                        Registration Script:

                        PHP-Code:
                        <?php

                        require_once ("../db_config.php");

                        # Hier wird geprüft, ob alle Felder des Login-Formulars auusgefüllt wurden
                        # Geprüft wird auch, ob die Zeichenlänge von Username und Passwort eingehalten wurden

                        if (!isset($_POST['submit']))
                        {
                            if(isset(
                        $_POST['username']) || isset($_POST['passwort1'])  || isset($_POST['passwort2'])  || isset($_POST['email']))
                            {
                                if( empty(
                        $_POST['username']) || empty($_POST['passwort1']) || empty($_POST['passwort2']) || empty($_POST['email']))
                                {
                                    
                        $error_msg_registration "Bitte alle Felder ausf&uuml;llen !";
                                    return;
                                }

                                if(
                        strlen($_POST['username']) >20)
                                {
                                    
                        $error_msg_registration "Der Benutzername darf maximal 20 Zeichen lang sein !";
                                    return;
                                }

                                if(
                        strlen($_POST['passwort1']) > 20)
                                {
                                    
                        $error_msg_registration "Das Passwort darf maximal 20 Zeichen lang sein !";
                                    return;
                                }
                            }
                        }



                        # Hier wird geprüft, ob der User 2 gleiche Passwörter zur Registration eingegeben hat
                        # Dann wird geprüft, ob die Usereingaben schon auf der Datenbank existieren


                        if ($_POST['passwort1'] == $_POST['passwort2'])
                        {
                            
                        $check_query $db_connect->query("SELECT `username` FROM user_tabelle WHERE `username` = ('".$_POST['username']."')");
                            
                        $check_username $check_query->num_rows;

                                if (
                        $check_username != 0)
                                {
                                     
                        $error_msg_registration "Dieser Benutzername existiert bereits !";
                                     return;
                                }


                            
                        $check_query $db_connect->query("SELECT `email` FROM user_tabelle WHERE `email` = ('".$_POST['email']."')");
                            
                        $check_email $check_query->num_rows;

                                if (
                        $check_email !=0)
                                {
                                     
                        $error_msg_registration "Diese E-Mailadresse existiert bereits !";
                                     return;
                                }
                        }
                        else
                        {
                            
                        $error_msg_registration "Die eingegebenen P&auml;ssw&ouml;rter stimmen nicht &uuml;berein !";
                            return;
                        }

                        # Hiermit wird die User_IP gespeichert

                        $user_ip ip2long($_SERVER['REMOTE_ADDR']);


                        # Nach der Überprüfung und korrekten eingaben, werden die Daten der Registration auf der Datenbank gespeichert


                        $sql $db_connect->query("INSERT INTO user_tabelle ( `username` , `passwort` , `email` , `user_ip` ) VALUES ('".$_POST['username']."' , '".md5($_POST['passwort1'])."' , '".$_POST['email']."' , $user_ip)");



                        # Nach dem alles abgeschlossen wurde, wird die Datenbankverbindung getrennt

                        $db_connect->close();


                        ?>
                        Login Script


                        PHP-Code:
                        <?php

                        require_once ("../db_config.php");

                        # Hier wird überprüft, ob die Loginfelder ausgefüllt wurden

                        if (!isset($_POST['submit']))
                        {
                            if (isset(
                        $_POST['username']) || isset($_POST['passwort']))
                            {
                                if (empty(
                        $_POST['username']) || empty($_POST['passwort']))
                                {
                                    
                        $error_msg_login "Es sind nicht alle Felder ausgef&uuml;llt !";
                                    return;
                                }
                                else
                                {

                        # Hier wird überprüft, ob der angegebene Username und das Passwort in der Kombination auf der datenbank gespeichert sind

                                    
                        $username_check $db_connect->query("SELECT `username` FROM user_tabelle WHERE `username` = ('".$_POST['username']."')");
                                    
                        $username_check_num_rows $username_check->num_rows;

                                    
                        $userpass_check $db_connect->query("SELECT `passwort` FROM user_tabelle WHERE `passwort` = ('".md5($_POST['passwort'])."')");
                                    
                        $userpass_check_num_rows $userpass_check->num_rows;

                         
                        # Wenn Username und Passwort übereinstimmrn, wird der User hier eingeloggt

                                    
                        if ($username_check_num_rows == true)
                                    {
                                        if (
                        $userpass_check_num_rows == true)
                                           {
                                               
                        $username $_POST['username'];
                                              
                        #$succses_msg_login = "Willkommen bei uns $username , hab viel Spa&szlig; hier";
                                               
                        header ("Location: http://starkstrom.bplaced.net/forum/gaestebuch.php");
                                               exit;
                                           }
                                           else
                                           {
                                               
                        $error_msg_login "Das Passwort stimmt nicht mit dem Username &uuml;berein !";
                                               return;
                                           }
                                    }
                                    else
                                    {
                                        
                        $error_msg_login "Der Username existiert nicht !";
                                        return;

                                    }

                                }
                            }
                        }

                        $db_connect->close();

                        ?>
                        ein kleines problemchen habe ich aber noch. ich will ja, daß nach dem erfolgreiechn login, der user auf eine bestimmte seite geleitet wird mittels header ("Location:")
                        leider funktioniert das bei mir noch nicht, hab in meinem script mal google.de genommen, könnt ihr mir sagen, woran das liegt ?

                        Kommentar


                        • #13
                          huhu.. habe wie bereits schon erwähnt, daß ich mich schon über meine config.php gegen sämtliche sachen geschützt habe ( z.b. allgemein alles was $_POST angeht )

                          escapt, gegen xss geschützt und htmlspecialchars ist auch mit im schutz drin, wird aber auch ständig erweitert.
                          HUHU...

                          deine config.php zeigste ja nicht, dabei würde mich interessieren, wie du fertige queries wie:
                          PHP-Code:
                          "SELECT `username` FROM user_tabelle WHERE `username` = ('".$_POST['username']."')"
                          wieder auseinanderziehst um deine ganzen schutzmechanismen loszufeuern.

                          und dann wollt ich noch wiessen, wie du aus dem md5passwd in der zweifelos tempöreren tabelle ein bauchbaren hasch zum speicern in einer persistenten tabelle machst.

                          wenn ich es mir recht überlege, es ist mir doch zu komplex...

                          achja, die debugging anleitung seite kennste inzwischen?

                          Kommentar


                          • #14
                            Zitat von moma Beitrag anzeigen
                            HUHU...

                            deine config.php zeigste ja nicht, dabei würde mich interessieren, wie du fertige queries wie:
                            PHP-Code:
                            "SELECT `username` FROM user_tabelle WHERE `username` = ('".$_POST['username']."')"
                            wieder auseinanderziehst um deine ganzen schutzmechanismen loszufeuern.

                            und dann wollt ich noch wiessen, wie du aus dem md5passwd in der zweifelos tempöreren tabelle ein bauchbaren hasch zum speicern in einer persistenten tabelle machst.

                            wenn ich es mir recht überlege, es ist mir doch zu komplex...

                            achja, die debugging anleitung seite kennste inzwischen?

                            nee sry, meine config.php zeige ich nicht ^^ .. aber ich kann dir sagen, daß alles was ich dort an schutz eingebaut habe auch tatsächlich bei jedem $_POST das ich verwendet habe funktioniert, habe es mehrfach und in sämtlichen variationen ausprobiert ( muss dazu sagen, habe dazu ein gutes youtube video gefunden, wo es einem gut erklärt wird, das kann ich gerne posten

                            http://www.youtube.com/watch?v=nCHmzR_5KTk

                            zu deinem md5 , was meinst du genau damit ?

                            meinst du wegen dem beim registrieren in die tabelle schreiben und dann beim login aus der tabelle heraus auch wieder zu erkennen ?

                            wenn ja, ich habe es ganz einfach gelöst in dem ich auch im login script das passwort vom user über das md5 verfahren mit der datenbank abgeglichen habe, also das eingegebene passwort direkt in md5 umgewandelt und das mit der datenbank verglichen, muss ja dann 2 x das selbe raus kommen (werde es aber noch sicherer machen und das salt mit dazu nehmen, das es wirklich einzigartig bleibt und nicht durch generatoren oder sonstiges gefunden werden kann )

                            mit debuggen habe ich mich noch nicht wirklich auseinandergesetzt, wollte erstmal überhaupt verstehen, wie html, css , msqli und php funktioniert, bevor ich ans debuggen gehe ^^

                            Kommentar


                            • #15
                              Zitat von Ascalon Beitrag anzeigen
                              wenn ja, ich habe es ganz einfach gelöst in dem ich auch im login script das passwort vom user über das md5 verfahren mit der datenbank abgeglichen habe, also das eingegebene passwort direkt in md5 umgewandelt und das mit der datenbank verglichen, muss ja dann 2 x das selbe raus kommen (werde es aber noch sicherer machen und das salt mit dazu nehmen, das es wirklich einzigartig bleibt und nicht durch generatoren oder sonstiges gefunden werden kann )

                              mit debuggen habe ich mich noch nicht wirklich auseinandergesetzt, wollte erstmal überhaupt verstehen, wie html, css , msqli und php funktioniert, bevor ich ans debuggen gehe ^^
                              ^^--^^
                              ich meine md5 ist für die tonne -> super.
                              zudem nutze ich es um fingerprints von dateien zu erhalten.
                              für passwörter ist es einfach ungeeinget!

                              ^^--^^
                              zu deinem video, bei zeit 1.50 hab ich verstanden, du hast es nicht verstanden.
                              sonst?
                              naja, viel weiter bin ich nicht gekommen.

                              ^^--^^

                              //OT:
                              ich hoffe ich habe es geschafft den text nach deinen gewohnheiten zu formatieren um dir das lesen zu erleichtern. meine mitforisten bitte ich hierfür um nachsicht

                              Kommentar

                              Lädt...
                              X