Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL - Injection

Einklappen

Neue Werbung 2019

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

  • SQL - Injection

    Ich hätt da mal ne Frage:
    Seit ich mit SQL arbeite werden immer alle daten schön validiert bevor sie in irgendeiner art und weiße mit der db in berührung kommen, schön und gut...jetzt wollte ich die funktionsweiße vertsehen und habe mir ein kleines-veruchs-script gemacht...

    Dieses bekommt eine variable über get in folgendem style:

    $test_variable = $_GET['test'];

    dann habe ich eine normale abfrage mit einem normalen query gemacht (also NICHT mal mysqli)
    die test_variable kam als where bedingung zum einsatz

    $test = "SELECT name FROM test WHERE id = '$test_variable'";


    So das noch fertig mit nem query auslesen und name ausgeben...

    jetzt habe ich beim testen einfach in die url oben die variable test so ähnlich gefüllt:

    '"; echo "Test

    wenn der das jetzt einsetzen würde müsste der ja eigentlich den select abbrechen und den echo ausgeben...da das nicht funktioniert hat habe ich vor dem query die test_variable ausgegeben, folgendes stand dann da:

    /'/"; echo /"Test

    oder so ähnlich...auf jedenfall so das es keinen schaden machen konnte...wo liegt denn also jetzt die Gefahr von SQL-injections...was habe ich da falsch verstanden??

  • #2
    Also echo "Test" wird er schonmal gar nicht machen, da SQL keine Ausgabe vorsieht.
    Die Gefahr von SQL-Injections liegt aber dennoch genau in dem von dir beschriebenen Szenario. Ich vermute nur, dass bei dir magic_quotes aktiviert sind, die ein Relikt aus alten Zeiten darstellen und ein Escaping automatisch vornehmen, allerdings unzureichend. Also wenn magic_quotes an sind, dann ein stripslashes() durchführen und dann ganz normal mit mysql_real_escape_string() behandeln.

    Kommentar


    • #3
      nehmen wir an in $test_variable steht
      ' OR name = 'Mein Name
      Wenn du das nun dort in die Query einsetzt, was bekommst du dann? Hat das noch etwas gemein mit einer ID bedingten Abfrage?

      Kommentar


      • #4
        Sein Problem ist eher, dass er sich wundert, warum denn schon alles escaped ist und warum er dann noch mysql_real_escape_string() einsetzen soll. Wie gesagt: magic_quotes.

        Kommentar


        • #5
          Hab ich dir wiedersprochen? Hab nur für sein Verständnisproblem ergänzen wollen.

          Kommentar


          • #6
            Okay, also bei der version von sql/php die ich da nutze gibt es einen automatischen escape?
            Nun ja, okay, danke für die antworten..

            Kommentar


            • #7
              Ja, der aber wie gesagt nicht ausreichend ist. Am besten solltest du eine eigene Escaping-Funktion implementieren:
              PHP-Code:
              function escapeString($string$mysqlConn null)
              {
                  if (
              function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
                      
              $string stripslashes($string);
                  }
                  return 
              mysql_real_escape_string($string$MysqlConn);

              Alternativ wendest du stripslashes() am Anfang einmal auf alle Werte in $_POST, $_GET und $_COOKIE an.

              Kommentar

              Lädt...
              X