SQL-Injection

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

  • SQL-Injection

    Hallo Leute,

    dies ist ein gemischtes SQL-PHP-Post. Falls ich es jetzt in der falschen Kategorie haben sollte, bitte verschieben.

    O.K. here we go ...

    Wenn ich das damals richtig verstanden habe, ist dies
    PHP-Code:
    mysql_real_escape_string($_POST['username']) 
    eine Maßnahme gegen eine SQL-Injection.

    Frage 1: Muss ich alle Dateneingaben aus Formularen, die ich in die DB übernehmen will so schützen?

    und weiter ...
    Ich habe gestern etwas gefunden, dass die Eingabe von HTML in Formularfeldern so unterbindet:
    PHP-Code:
    // ALWAYS clean the POST variables of any HTML tags first.
    // And here we do it in one easy step.
    $_POST array_map('strip_tags'$_POST); 
    Jetzt würde ich das gerne miteinander verbinden.
    Falls Antwort auf Frage 1 = ja

    Frage 2: Kann ich das so machen?
    PHP-Code:
    $_POST array_map('strip_tags'mysql_real_escape_string($_POST)); 
    Frage 3: Macht das überhaupt Sinn, diese beiden Sachen miteinander zu verbinden.

    Für eure weisen Antworten wie immer dankbar
    Zuletzt geändert von Smartsoul; 07.04.2006, 14:01.
    [FONT=arial][COLOR=orangered]
    Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
    [/COLOR]

    ... und nicht vergessen: der Ton macht die Musik ;-)

    ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
    [/FONT]

  • #2
    Re: SQL-Injection

    Original geschrieben von Smartsoul
    Frage 1: Muss ich alle Dateneingaben aus Formularen, die ich in die DB übernehmen will so schützen?
    Und darauf fällt dir mit ein wenig eigenem Nachdenken keine sinnvolle Antwort ein ...?
    Ich habe gestern etwas gefunden, dass die Eingabe von HTML in Formularfeldern so unterbindet:
    strip_tags habe ich schon immer für Mist gehalten.
    Warum nicht ein einfaches htmlspecialchars()?

    Frage 3: Macht das überhaupt Sinn, diese beiden Sachen miteinander zu verbinden.
    Nein, zumindest nicht auf diese Weise.

    Absichern für MySQL beim Eintragen in MySQL.
    Absichern für die Ausgabe bei der Ausgabe.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Und darauf fällt dir mit ein wenig eigenem Nachdenken keine sinnvolle Antwort ein ...?
      War der Meinung das "ja" die richtige Antwort sei, aber ich war mir nicht sicher, deshalb die in deinen Augen wahrscheinlich dumme Frage.

      Warum nicht ein einfaches htmlspecialchars()?
      Etwa so?

      PHP-Code:
      $_POST array_map(htmlspecialchars($_POST)); 


      Absichern für MySQL beim Eintragen in MySQL.
      O.K. Verstanden!

      Absichern für die Ausgabe bei der Ausgabe.
      Ausgabe wohin? Bei der Ausgabe von Daten aus der DB?
      [FONT=arial][COLOR=orangered]
      Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
      [/COLOR]

      ... und nicht vergessen: der Ton macht die Musik ;-)

      ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
      [/FONT]

      Kommentar


      • #4
        am thema vorbei:

        soo wir reden hier über sql injects?
        was zum henker hat html-code damit zu tun... *kopfschüddel*

        kurz zur Problematik:

        Ein SQL Inject ist der Versuch, mittels Formular illegal die datenbank zu füttern. Das hat nichts damit zu tun, dass jemand html-code reinschreibt. Das kann ja unter gewissen umsänden sogar erwünscht sein.

        nein, vielmehr geht es darum, datensätze zu manipulieren oder eigentlich geschützte datensätze auszulesen, indem man geschickt formulierte SQL-Statements per Formular übergibt.

        so könnte man zum beispiel bei einem login eine manipulation versuchen:

        nehmen wir an, wir wollen nach dem login folgendes tun:

        SELECT id FROM users WHERE (email='$_POST[email]') AND (password='$_POST[password]')

        der böswillige user würde nun versuchen, die tatsache, dass die daten email und password in der sql-query vorhanden sind, für seine zwecke auszunutzen und eine innere query zu starten..

        er könnte zum beispiel dort folgendes statement als password eingeben:
        x' OR password<>'x

        okay.. zugegebn .. ganz billiger versuch und vermutlich auch nicht wirklungsvoll, aber ich mag jetzt nicht über escapes und anführungszeichen nachdenken. In der realität geht es so nicht, sondern musss chon etwas cleverer angestellt werden.

        theoretisch würde das aber (wenn man die escapezeichen uns sonderzeichen bei den ' mal außen vor lässt zu folgender query führen:

        SELECT id FROM users WHERE (email='irgendwer@irgendwas.de') AND (password='x' OR password<>'x')

        soo.. und schwupps kann ich mich als jeder einloggen, von dem ich nur die emailadresse kennen, denn das passwort wird in jedem fall gleich oder ungleich meiner zeichenfolge sein.

        davor gilt es sich zu schützen...

        das sollte die eigentlich thematik sein, und nicht die frage, darf mein kleiner user HTML verwenden..
        au weia, wie schlimm..

        greetz, high
        Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
        When everything else fails, manipulate the data...
        Beschriftungen / Großformatdruck / Werbemittel

        Kommentar


        • #5
          @ highrise

          danke für deine ausführliche Erklärung. War allerdings schon soweit klar. Aber schön, dass es jetzt hier nochmal so deutlich steht.

          Sorry, wenn ich hier verschiedene Fragen vermischt habe.

          Habe den Titel des Threads geändert.
          Zuletzt geändert von Smartsoul; 07.04.2006, 14:02.
          [FONT=arial][COLOR=orangered]
          Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
          [/COLOR]

          ... und nicht vergessen: der Ton macht die Musik ;-)

          ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
          [/FONT]

          Kommentar


          • #6
            Original geschrieben von Smartsoul
            Etwa so?
            PHP-Code:
            $_POST array_map(htmlspecialchars($_POST)); 
            Nein, wozu?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Du solltest beim Eintrag in die Datenbank so machen:
              mysql_real_escape_string($eingabe);

              Und bei der Ausgabe falls HTML unerwünscht ist z.B.:
              addslashes() oder htmlentities()...

              Gruß
              icecream
              icedcream.de Webdesign Regensburg

              Kommentar


              • #8
                Um htmlspecialchars() auf alle Elemente in $_POST anzuwenden.
                [FONT=arial][COLOR=orangered]
                Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                [/COLOR]

                ... und nicht vergessen: der Ton macht die Musik ;-)

                ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                [/FONT]

                Kommentar


                • #9
                  Würde gerne wissen, ob ich z.B. anstatt
                  PHP-Code:
                  $name mysql_real_escape_string($_POST['name']);
                  $vorname mysql_real_escape_string($_POST['vorname']);
                  //usw. 
                  das ganze Array $_POST auf einmal mit mysql_real_escape_string bearbeiten kann?

                  Analog dazu das ganze Array mit htmlspecialchars()
                  [FONT=arial][COLOR=orangered]
                  Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                  [/COLOR]

                  ... und nicht vergessen: der Ton macht die Musik ;-)

                  ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                  [/FONT]

                  Kommentar


                  • #10
                    Original geschrieben von icecream
                    Und bei der Ausgabe falls HTML unerwünscht ist z.B.:
                    addslashes() oder htmlentities()...
                    addslashes ist Nonsense in so einem Falle.

                    Original geschrieben von Smartsoul
                    Würde gerne wissen, ob ich [...] das ganze Array $_POST auf einmal mit mysql_real_escape_string bearbeiten kann?
                    Wenn du das für angebracht hältst, kannst du das.

                    (Ich halte es nicht für angebracht, weil man ja die POST-Daten evtl. noch für was anderes braucht, als nur für die Verwendung in einer MySQL-Query.)
                    Analog dazu das ganze Array mit htmlspecialchars()
                    Noch mal: HTML entschärfst du sinnvoller Weise, bevor du die Daten an den browser ausgibst.
                    Der Datenbank ist HTML vollkommen egal, für die ist das nur Text - also lasse diesen beim Abspeichern so, wie er ist (ausgenommen natürlich maskieren).
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Original geschrieben von wahsaga
                      Ich halte es nicht für angebracht, weil man ja die POST-Daten evtl. noch für was anderes braucht, als nur für die Verwendung in einer MySQL-Query.
                      Das heisst du würdest es so machen?

                      PHP-Code:
                      $name mysql_real_escape_string($_POST['name']);
                      $vorname mysql_real_escape_string($_POST['vorname']);
                      //usw. 
                      Dabei müssten doch die $_POST Daten erhalten bleiben.
                      [FONT=arial][COLOR=orangered]
                      Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                      [/COLOR]

                      ... und nicht vergessen: der Ton macht die Musik ;-)

                      ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                      [/FONT]

                      Kommentar


                      • #12
                        Original geschrieben von Smartsoul
                        Das heisst du würdest es so machen?
                        PHP-Code:
                        $name mysql_real_escape_string($_POST['name']);
                        $vorname mysql_real_escape_string($_POST['vorname']);
                        //usw. 
                        Entweder so - oder gleich die Funktion im Zusammenbau meines Query-Strings einsetzen.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          THX für die Hilfe!

                          Bitte um Nachsicht, wenn meine Probleme nicht sehr anspruchsvoll sind. Bin zwar schon [COLOR=crimson]"Junior Member"[/COLOR] hier, aber nach wie vor ein ziemliches Greenhorn.
                          [FONT=arial][COLOR=orangered]
                          Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                          [/COLOR]

                          ... und nicht vergessen: der Ton macht die Musik ;-)

                          ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                          [/FONT]

                          Kommentar

                          Lädt...
                          X