Ankündigung

Einklappen
Keine Ankündigung bisher.

SQLInjection vermeiden bei IN clause

Einklappen

Neue Werbung 2019

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

  • SQLInjection vermeiden bei IN clause

    Hi,

    ich habe folgendes Problem:

    Ich brauche eine bestimmte Anzahl Systeme aus einer Datenbank. Dieses Systeme sind definiert durch eine Unique ID die aus Buchstaben und Zahlen bestehen. Wenn ich nun im einfachsten Fall ein Script schreibe:

    PHP-Code:
    $systemIdList json_decode($_POST['systemid']);  
    $idList "";
    foreach(
    $systemIdList as $id)    
        
    $idList.="'".$id."', ";
    $idList substr($idList,strlen($idList) -2); 
    und diese Variable dann in den Query direkt einbauen

    PHP-Code:
    $sql "SELECT column FROM table name WHERE id IN ($idList)"
    Habe ich ja eine super Injection oder? Da ich aber nicht weiß wie viele ID angefragt werden kann ich auch keine Platzhalter für prepared statements setzen.

    Wie lößt man so ein Problem?

    Gruß

    Claus
    Pre-Coffee-Posts sind mit Vorsicht zu geniessen!


  • #2
    Beispiel für Mysql
    PHP-Code:
    $ids = array(1,5,18,25);

    // creates a string containing ?,?,?
    $bindClause implode(','array_fill(0count($ids), '?'));
    //create a string for the bind param just containing the right amount of i
    $bindString str_repeat('i'count($ids));

    $stmt $mysqli->prepare('SELECT column FROM anyTable WHERE `id` IN (' $bindClause ') ORDER BY `name`;');

    $stmt->bind_params($bindString, ...$ids);
    $stmt->execute(); 

    Kommentar


    • #3
      PHP-Code:
      $db = new PDO('mysql:dbname=test;host=127.0.0.1''root''');

      $ids = [151825];

      $sql "
          SELECT  *
          FROM    tabelle
          WHERE   id IN ( " 
      implode(', 'array_fill(0count($ids), '?')) . " )
      "
      ;

      $sth $db->prepare($sql);
      $result $sth->execute($ids); 

      Kommentar


      • #4
        Danke Euch

        Gruß

        Claus
        Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

        Kommentar

        Lädt...
        X