Webdesign in Siegen

Codeschnipsel - SQL Injection funktioniert nicht?!

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Codeschnipsel - SQL Injection funktioniert nicht?!

Beitragvon snoeber am 11.02.2008, 11:23

Hallo zusammen..

Ein Kollege von mir, welcher sich neuerdings mit PHP auseinandersetzt, suchte sich ein SQL Injection Script. Da hab ich ihn auf das Sciprt in der Tutorial-Section von Basti aufmerksam gemacht. Da sagt der mir, das funnktioniert nicht.
Dann hab ich das Ding mal seber angeschaut. Wenn man einen einzelnen Begriff beim eregi() angibt funktionierts, über die Arrayvariable aber nicht...:S

Code: Alles auswählen

function checkString($string)
{
  $check = array();
  $check[] = "SELECT";
  $check[] = "DROP";
  $check[] = "INSERT";
  $check[] = "TABLE";
  $check[] = "CREATE";
  $check[] = "DELETE";
  $check[] = "UPDATE";
  $check[] = "WHILE";
  $check[] = "#";
  $check[] = "=";
  $check[] = "BETWEEN";
  $check[] = "OR";
  $check[] = "AND";
  $check[] = ":";
  $check[] = "//";
  $check[] = ";";
  $check[] = "'";
  $check[] = "-";
  $check[] = """;

  $freigabe=true;

  foreach ($check as $array)
  {
    if(eregi($check, $string)) // ich glaube hier liegt das Problem.. oder steh ich auf dem Schlauch?
      $freigabe=false;
  }
 
  return $freigabe;
}


Steh ich jetzt einfach total auf dem Schlauch, den ich weiss nicht wie ich ihm sonst helfen kann..
kleines dorf - grosses business - 7012er...POW

Webdesign: Aexer.com
Photos: photos.aexer.com
Benutzeravatar
snoeber
Mitglied
 
Beiträge: 293
Registriert: 26.10.2006
Wohnort: Felsberg ( CH )

Re: Codeschnipsel - SQL Injection funktioniert nicht?!

Beitragvon Ingo am 11.02.2008, 14:31

Hi, snoeber.
Ich denke auch, dass das die Stelle ist: statt if(eregi($check, $string)) sollte es heißen
if(eregi($array, $string)). Außerdem muss noch die letzte $check[]-Zeile geändert
werden in $check[] = "\"";. (Das Anführungszeichen maskieren.) - Vllt. klappt's ja jetzt ?

Gruß, Ingo :)
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 536
Registriert: 01.04.2007
Wohnort: Neuss/NRW

Re: Codeschnipsel - SQL Injection funktioniert nicht?!

Beitragvon snoeber am 11.02.2008, 14:50

das mit der letzten CheckZeile hab ich auch gemerkt :) .. Ich bin mir jetzt nicht sicher obs mit $array funktioniert...Ich glaube das habe ich gestern auch noch ausprobiert. Kam glaube ich ein Fehler: REG_EMPTY ..

Ich versuchs heute Abend mal..
kleines dorf - grosses business - 7012er...POW

Webdesign: Aexer.com
Photos: photos.aexer.com
Benutzeravatar
snoeber
Mitglied
 
Beiträge: 293
Registriert: 26.10.2006
Wohnort: Felsberg ( CH )

Re: Codeschnipsel - SQL Injection funktioniert nicht?!

Beitragvon Basti am 11.02.2008, 17:40

Also eigentlich ist diese if-Abfrage schon korrekt, lediglich das letzte Arrayelement müsste noch wie Ingo bereits sagte escaped werden.

Da ja eine foreach()-Schleife verwendet wird, werden auch nur einzelne Elemente überprüft. Wichtig ist eben nur, dass der zweite Parameter ein String ist.

// edit: Sorry, hatte beim drüberschauen die falsche Variablenbezeichnung überlesen. Richtigerweise muss anstatt $check natürlich die Variable der foreach()-Schleife, also $array in der eregi()-Funktion verwendet werden ... :oops:
Benutzeravatar
Basti
Moderator
 
Beiträge: 1864
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Re: Codeschnipsel - SQL Injection funktioniert nicht?!

Beitragvon snoeber am 11.02.2008, 22:24

Basti hat geschrieben:Also eigentlich ist diese if-Abfrage schon korrekt, lediglich das letzte Arrayelement müsste noch wie Ingo bereits sagte escaped werden.

Da ja eine foreach()-Schleife verwendet wird, werden auch nur einzelne Elemente überprüft. Wichtig ist eben nur, dass der zweite Parameter ein String ist.

// edit: Sorry, hatte beim drüberschauen die falsche Variablenbezeichnung überlesen. Richtigerweise muss anstatt $check natürlich die Variable der foreach()-Schleife, also $array in der eregi()-Funktion verwendet werden ... :oops:


also wenn ich eine Variable über $_GET weitergebe und diese nur Buchstaben beinhaltet ist diese doch ein String...
Wenn man $array nach dem eregi() einfügt kommt ein Fehler:

Warning: eregi() [function.eregi]: REG_EMPTY in C:\Programme\xampp\htdocs\Localdealerresell\includes\functions.inc.php on line 146
kleines dorf - grosses business - 7012er...POW

Webdesign: Aexer.com
Photos: photos.aexer.com
Benutzeravatar
snoeber
Mitglied
 
Beiträge: 293
Registriert: 26.10.2006
Wohnort: Felsberg ( CH )

Re: Codeschnipsel - SQL Injection funktioniert nicht?!

Beitragvon Ingo am 12.02.2008, 02:12

Hi. Ich nochmal.
Ich hab mal ein bisschen herumgespielt; die Meldung REG_EMPTY erscheint (wie der Name vermuten läßt),
wenn das Suchmuster (1.Arg. von eregi) undefiniert oder ein leerer String ist (und evtl. $string nicht-leer).
Vllt. zeigt sich, wo der Fehler liegt, wenn du die foreach-Schleife durch ein echo ergänzt:
Code: Alles auswählen
  foreach ($check as $arrayvalue)
  {
    echo "teste $string gegen $arrayvalue<br />\n";     // sind $string und $arrayvalue gesetzt?

    if(eregi($arrayvalue, $string))           // alle Namen richtig?
      $freigabe=false;
  }

Gn8, Ingo :)
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 536
Registriert: 01.04.2007
Wohnort: Neuss/NRW


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast