SQL Injektion

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

  • SQL Injektion

    Ein Freund hat mir erzählt ich muß meinen Script mit "SQL Injektion"
    überarbeiten, sonst ist meine Datenbank nicht sicher.
    Wißt ihr wie das geht, an folgenden Beispiel: (Ausschnitt)

    $userda1 = mysql_query ("SELECT * FROM db_user WHERE username = '$newuser'");

    oder

    $userda= mysql_num_rows($userda1); if ($userda>="1")


    Danke.

    mfg
    Sven
    Zuletzt geändert von Svenoldman; 21.09.2006, 10:01.

  • #2
    die suche hät dir sicher geholfen aber ich hab grad zeit *g*

    $userda1 = mysql_query ("SELECT * FROM db_user WHERE username = '$newuser'");

    nun stell dir vor du arbeitest mit register_globals on

    sprich du kannst per url $newuser bestimmt
    script.php?newuser=foo

    so nun stell dir vor ich schreib da folgendes rein "'; Delete From tabelle;'"

    und dies wird nicht korrekt escapet.. dann kann man da böse sachen machen.
    Oder man kann so evtl pw abfragen umgehen und sich so als ein user einloggen ohne dessen pw zu kennen und kann sich halt so rechte unter den nagel reißen.

    die funktionen die dir da helfen sollte ist mysql_real_escape_string() für strings und intval() für zahlen

    Ich hoffe es hat dir das bischen veranschaulichen..

    Kommentar


    • #3
      Ist es nicht so das wenn mein User der sich zur DB connectet nur
      select darf, das dann man "delete from ..." nichts passiert?

      Gruss Sven
      Vielen Dank

      Kommentar


      • #4
        Original geschrieben von netleader
        Ist es nicht so das wenn mein User der sich zur DB connectet nur
        select darf, das dann man "delete from ..." nichts passiert?
        Schon - aber wo werden die Rechte schon so differenziert vergeben ...?


        Und per SQL Injection können ja nicht nur Daten verändert, sondern bspw. auch Logins umgangen werden - SELECT also ebenfalls nicht zulassen wäre da wohl kaum die "Lösung".
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          @trashar: Das mysql_query() seit neuestem auch mehrere Queries (durch ; getrennt) verarbeiten kann, ist mir neu.

          ein UNION ist da imho schon erforderlich.

          Kommentar


          • #6
            War von mir nur die Frage, weil der normale User der z.B. per Web auf
            meine DB zugreifen darf grundsätzlich nur das Recht select bzw. wenn
            ein Insert benötigt wird nur für Tabelle XY und Spalte AB dieses Recht
            bekommt.
            Vielen Dank

            Kommentar


            • #7
              definiere mal bitte "der normale User der vom Web"

              Kommentar


              • #8
                Mit normalen User mein ich den, der in meiner open.inc.php drin
                steht über den die Verbindung zur DB hergestellt wird.

                [PHP

                $dbhost = "localhost"; // DB-Server
                $dbuser = "HuwP1jU"; // DB-Server Username
                $dbpass = "hier_das _Passwort"; // DB-Server Passwort
                $dbname = "GSMAND10"; // Datenbank Name

                // Mit DB-Server und Datenbank verbinden, bei Fehler Script beenden.
                $db_link = @mysql_connect($dbhost, $dbuser, $dbpass);


                if (! $db_link) {
                die("Fehler beim Verbinden mit Server '$dbhost' als '$dbuser' mit Passwort '$dbpass'.");
                }

                if (! mysql_select_db($dbname, $db_link)) {
                die("Fehler beim Verbinden mit der Datenbank $dbname");
                }

                [/PHP]
                Vielen Dank

                Kommentar


                • #9
                  Wenn dem so ist, ist das gut. aber viele applicationen kommen ohne delete nicht aus.

                  und wie gesagt ist das mit dem löschen auch nur eine gefahr. Mindestens genau so schlimm ist es, wenn ein User (Surfer) daten anzeigen kann, die er gar nicht sehen darf. Und das lässt sich über die Rechte halt nicht beeinflussen.

                  Kommentar


                  • #10
                    Erst mal vielen Dank, werde mich dann jetzt mal ein bisschen
                    intensiver mit dem Thema befassen.

                    Gruss Sven
                    Vielen Dank

                    Kommentar


                    • #11
                      Au man, das kann ja richtig böse werden.
                      Denn der User trägt sich über ein Formular ein.
                      Wenn ich das richtig verstehe, kann er mit einen sql-Eintrag meine
                      Datenbank löschen bzw. an geschützten Bereich rankommen, wo er nicht befugt ist.
                      Da hat der Freund recht, das scheint ein wichtiges Thema zu sein.

                      die funktionen die dir da helfen sollte ist mysql_real_escape_string() für strings und intval() für zahlen

                      Ich hoffe es hat dir das bischen veranschaulichen..
                      Jetzt muß ich erst mal schauen, was du damit meinst.
                      Es geht also um abgesicherte query`s ?
                      Jetzt im Netz habe ich gelesen das es nur mit insert befehlen geht.
                      Zur Zeit grübel ich wie ich es umsetzen soll.


                      Danke.
                      mfg
                      Sven
                      Zuletzt geändert von Svenoldman; 21.09.2006, 18:43.

                      Kommentar


                      • #12
                        Jetzt im Netz habe ich gelesen das es nur mit insert befehlen geht.
                        was soll nur mit insert-befehlen gehen und warum?

                        Kommentar


                        • #13
                          @topicstarter
                          http://de.wikipedia.org/wiki/SQL_Injection hier findest du auch Beispiele mit SELECT.

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar

                          Lädt...
                          X