Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ne Frage zu SQL Injections

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ne Frage zu SQL Injections

    N´abend.

    Ich hab hier diese URL

    "https://meineSeite.de/index.php?cat_id=1&product_id=-1+UNION+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,16,17,18--"

    und wie man sehen kann, ist das eine unschöne Injection. Jetzt hatte ich diesen Lösungsgedanken hier:

    Code:
    $injections = array("SELECT", "DELETE", "UPDATE", "UNION", "INSERT", "DROP", "TRUNCATE");
    
    foreach( $injections as $inj)
    {
      foreach( $_GET as $get => $value)
      {
        if(stristr($value, $inj))
        {
          $_GET[$get] = "";
        }
      }
    }
    Die Funktion

    mysql_real_escape_string();

    habe ich auch verwendet aber sie hat nicht geholfen. Vermutlich, wenn ich das richtig verstanden habe, weil keine " o.ä. vorkommen in der URL.
    Kann ich noch was machen oder bin ich total auf dem Holzweg?
    Oder anders gefragt: Was macht ihr gegen Injections?

    -bedank-
    TZP

  • #2
    product_id auf int casten...

    Kommentar


    • #3
      Muh, ich bin dumm wie Brot...damit kann ich mir auch das obrige Gedöns sparen. ^^

      Kommentar


      • #4
        Das was du da oben tust sein lassen, das genügt in den meisten Fällen...

        Was willst du da oben eingentlich überhaupt machen?
        Strings escapen, beispielsweise mit mysql_real_escape_string(), integer(bspw. bei IDs) auf Integer casten...

        Kommentar


        • #5
          Der Gedanke war, dass bei einem Begriff wie "UNION" und Konsorten im $_GET einfach die entsprechende Variable leer gemacht wird. Aber das zu einem int zu casten ist auch ne gute Idee.

          Kommentar


          • #6
            Und SQL Injection besteht nicht nur aus diese SQL Befehlen da oben, es reicht auch sowas in der URL anzuhängen:
            Code:
            ?user_id=5 OR 1=1

            Kommentar


            • #7
              Die Tatsache, dass angeblich mysql_real_escape_string nicht geholfen hat, scheint mir darauf zu deuten, dass er sein statement außerdem so zusammenbau:

              PHP-Code:
              $sql "SELECT * FROM `tbl` WHERE `product_id` = "mysql_real_escape_string($_GET['product_id']); 
              was bei seiner eingabe dann Resultiert ist
              Code:
              SELECT * FROM `tbl` WHERE `product_id` = -1 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,16,17,18--
              (keine ahnung ob das jetzt 100% korrekt ist, aber so in etwa)

              Da hiflt real escape natürlich nix, weil er aus keiner zeichenkette "ausbrechen" muss.
              In dem Fall ist natürlich typecasting nach int die bessere lösung, aber der vollständigkeithalber, für string angaben sollte das so aussehen, dann klappts auch:

              PHP-Code:
              $sql "SELECT * FROM `tbl` WHERE `product_id` = '"mysql_real_escape_string($_GET['product_id']) . "'"

              Kommentar


              • #8
                Gut zu wissen. Ich danke erneut.

                Kommentar

                Lädt...
                X