Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] login,registersystem sicher machen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] login,registersystem sicher machen

    haben ach einem tut ein Loginsystem mit registrierung gecodet und habe erfahren das es so sehr unsicher ist was SQl injections betrifft.
    Ic hweis auch das es nur über mysql_real_escape_String
    Habe aber null plan wie und wo im Code ich das einfügen muss vielleicht kann mir jemand helfen.

    Registrierungsscript

    PHP-Code:
    mysql_select_db("DB") or die ("Datenbank konnte nicht ausgewählt werden"); 
    $username $_POST["username"]; 
    $passwort $_POST["passwort"]; 
    $passwort2 $_POST["passwort2"]; 
    if(
    $passwort != $passwort2 OR $username == "" OR $passwort == ""
        { 
        echo 
    "Eingabefehler. Bitte alle Felder korekt ausfüllen.<br><br>
     <a href=\"eintragen.html\">Zurück</a>"

        exit; 
        } 
    $passwort md5($passwort); 
    $result mysql_query("SELECT id FROM login WHERE username LIKE '$username'"); 
    $menge mysql_num_rows($result); 
    if(
    $menge == 0
        { 
        
    $eintrag "INSERT INTO login (username, passwort) VALUES ('$username', '$passwort')"
        
    $eintragen mysql_query($eintrag); 
        if(
    $eintragen == true
            { 
            echo 
    "Benutzername <b>$username</b> wurde erstellt. <a href=\"login.html\">Login</a>"
            } 
        else 
            { 
            echo 
    "Fehler beim Speichern des Benutzernames. <a href=\"eintragen.html\">Zurück</a>"
            } 

        } 
    else 
        { 
        echo 
    "<b>Benutzername schon vorhanden. </b><a href=\"eintragen.html\">Zurueck</a>"
        } 
    login.php

    PHP-Code:
    $username $_POST["username"]; 
    $passwort md5($_POST["password"]); 
    $abfrage "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1"
    $ergebnis mysql_query($abfrage); 
    $row mysql_fetch_object($ergebnis); 
    if(
    $row->passwort == $passwort
        { 
        
    $_SESSION["username"] = $username
        echo 
    "Du bist jetzt eingeloggt. <br> "
        } 
    else 
        { 
        echo 
    "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"
        } 
    ?> 
    Wäre echt nett wenn ihr einem Anfänger helfen könntet. danke

  • #2
    Du musst jede Variable, die von außen eingegeben wird, durch die Funktion absichern. Also jedes INSERT, UPDATE usw, wo eine post/get-bestimmte Variable drinsteckt. Sonst könnte jemand eine weitere Suche einschleusen.


    PS: Gewöhne dir echo ' an. Dann musst du auch nicht die doppelten beim HTML immer escapen.

    Kommentar


    • #3
      Ich habe heute mal meinen guten, deswegen habe ich deine relevanten Scriptteile mal angepasst:

      im Registrierungs-Script:
      PHP-Code:
      // ....
      $result mysql_query("SELECT id FROM login WHERE username LIKE '" mysql_real_escape_string$username ) . "'"); 
      $menge mysql_num_rows($result); 
      if(
      $menge == 0
          { 
          
      $eintrag "INSERT INTO login (username, passwort) VALUES ('" mysql_real_escape_string$username ) . "', '$passwort')"
          
      $eintragen mysql_query($eintrag); 
      // ... 
      und Login-Script:
      PHP-Code:
      //...
      $abfrage "SELECT username, passwort FROM login WHERE username LIKE '" mysql_real_escape_string$username ) . "' LIMIT 1"
      $ergebnis mysql_query($abfrage); 
      //... 
      Bei den Passwort-Variablen ist es nicht nötig, da md5 sowieso alle schädlichen Code rausfiltert und zahlen oder buchstaben daraus macht.
      [B]Mfg Tomtaz[/B]
      [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

      Kommentar


      • #4
        Danke Tom taz
        auf meinem Server ist magic_quotes_gpc aktivert kann ich die scripte dann trotzdem so sichern oder gibst probleme?

        Kommentar


        • #5
          dann solltest du sowieso stripslashes() benutzen...

          also dann so:
          PHP-Code:
          mysql_real_escape_stringstripslashes$username ) ); 
          [B]Mfg Tomtaz[/B]
          [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

          Kommentar


          • #6
            Hallo Tomatz das ist nicht ganz richtig.

            Wenn man zum Beispiel nicht weis ob magic_quotes aktiviert ist macht man solch Prüfung bevor man mysql_real_escape_string benutzt!
            Weil in deinem Code Beispiel führst du erst mysql_real_escape_string aus und dann erst stripslashes und das wäre Sinnlos. Ich habe so einen ähnlichen Fehler auch gemacht,aber da gabs nikosch der mich darauf hingewiesen hat!

            PHP-Code:
            if(get_magic_quotes_gpc())
            {
                  
            $_POST['name'] = stripslashes($_POST['name']);

            mfg der litter
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            [URL]http://www.lit-web.de[/URL]

            Kommentar


            • #7
              Nein, in dem Code wird ERST stripslashes() ausgeführt und DANN mysql_real_escape_string() !!! Es wird immer die Funktion zu erst ausgeführt die "innen" steht.

              Aber trotzdem ist es einfach wenn man alle POST Variablen einmal durch stripslashes laufen lässt.

              PHP-Code:
              <?php
              if (get_magic_quotes_gpc() AND isset($_POST) AND is_array($_POST)) {
                  foreach (
              $_POST as $key => $value) {
                      
              $_POST[$key] = stripslashes($value);
                  }    
              }

              Kommentar


              • #8
                Oh wieder was gelernt! Gut aber mit einem Punkt lag ich ja richtig!
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                [URL]http://www.lit-web.de[/URL]

                Kommentar


                • #9
                  Also mit Stripslashes gehts nicht
                  PHP-Code:
                   mysql_real_escape_stringstripslashes(  $username ) . "'"); 
                  Wenn ich das stripslashes weglasse gehts sowohl lokal als auch aufm webspace.

                  Kommentar


                  • #10
                    Ja du sollst ja auch prüfen ob magic_quotes on sind so wie es ich bzw. Flor1an in kürzerer Variante hier gepostet haben! Dann gehts auch!
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    [URL]http://www.lit-web.de[/URL]

                    Kommentar


                    • #11
                      ob wohl ich die abfrage
                      PHP-Code:
                      if (get_magic_quotes_gpc() AND isset($_POST) AND is_array($_POST)) {
                          foreach (
                      $_POST as $key => $value) {
                              
                      $_POST[$key] = stripslashes($value);
                          }    

                      am anfang mache kriege ich folgende Fehlermeldung.

                      Parse error: syntax error, unexpected ';' in /var/www/html/web1252/html/VRH/eintragen.php on line 32

                      Das sind die betreffenden Zeilen aus eintragen .php

                      PHP-Code:
                      if($passwort != $passwort2 OR $username == "" OR $passwort == ""
                          { 
                          echo 
                      "Eingabefehler. Bitte alle Felder korekt ausfüllen.<br><br>
                       <a href=\"eintragen.html\">Zurück</a>"

                          exit; 
                          } 
                      $passwort md5($passwort); 
                      $result mysql_query("SELECT id FROM login WHERE username LIKE '" mysql_real_escape_string(  $username ) . "'"); 
                      $menge mysql_num_rows($result); 
                      if(
                      $menge == 0
                          { 
                          
                      $eintrag "INSERT INTO login (username, passwort) VALUES ('" mysql_real_escape_string(  $username ) . "', '$passwort')"
                          
                      $eintragen mysql_query($eintrag); 
                          if(
                      $eintragen == true

                      Kommentar


                      • #12
                        Was ist den Zeile 31 und 32 ??

                        Kommentar


                        • #13
                          Zeile 31 Das hier
                          PHP-Code:
                          $passwort md5($passwort); 
                          und zeile 32 ist ne leerzeile siehe auch oben.

                          Kommentar


                          • #14
                            Der Fehler sagt wohl dass du ein ; vergessen hast. Aus einer Zeile Code werd ich nicht schlau. Kannst du nich mal mehr relevanten Code posten?

                            Kommentar


                            • #15
                              Schau mal in POst 11 da habe ich ab Zeile 25 bis zeile 40 den code gepostet. Stelle mal den kompletten code rein.

                              PHP-Code:
                              <?php 
                               
                              include('db.php');
                               
                              if (
                              get_magic_quotes_gpc() AND isset($_POST) AND is_array($_POST)) {
                                  foreach (
                              $_POST as $key => $value) {
                                      
                              $_POST[$key] = stripslashes($value);
                                  }    

                              $username $_POST["username"]; 
                              $passwort $_POST["passwort"]; 
                              $passwort2 $_POST["passwort2"]; 
                              if(
                              $passwort != $passwort2 OR $username == "" OR $passwort == ""
                                  { 
                                  echo 
                              "Eingabefehler. Bitte alle Felder korekt ausfüllen.<br><br>
                               <a href=\"eintragen.html\">Zurück</a>"

                                  exit; 
                                  } 
                              $passwort md5($passwort); 
                              $result mysql_query("SELECT id FROM login WHERE username LIKE '" mysql_real_escape_string(  $username ) . "'"); 
                              $menge mysql_num_rows($result); 
                              if(
                              $menge == 0
                                  { 
                                  
                              $eintrag "INSERT INTO login (username, passwort) VALUES ('" mysql_real_escape_string(  $username ) . "', '$passwort')"
                                  
                              $eintragen mysql_query($eintrag); 
                                  if(
                              $eintragen == true
                                      { 
                                      echo 
                              "Benutzername <b>$username</b> wurde erstellt. <a href=\"login.html\">Login</a>"
                                      } 
                                  else 
                                      { 
                                      echo 
                              "Fehler beim Speichern des Benutzernames. <a href=\"eintragen.html\">Zurück</a>"
                                      } 

                                  } 
                              else 
                                  { 
                                  echo 
                              "<b>Benutzername schon vorhanden. </b><a href=\"eintragen.html\">Zurueck</a>"
                                  } 
                              ?>

                              Kommentar

                              Lädt...
                              X