am: 28. Februar 2010, 14:00:23
Hallo,
in der class.inputfilter.php sind in der Funktion "process" meiner Meinung nach ein Fehler und ein paar konzeptionelle Schwächen enthalten.
Bei den folgenden Zeilen fehlen die geschweiften Klammern um den eigentlichen foreach Block. Dies hat zur Folge, dass immer nur der erste Eintrag des $_GET oder $_POST usw. Array ausgewertet wird.
77 // clean all elements in this array78 if (is_array($source)) {79 foreach ($source as $key => $value)80 // filter element for XSS and other 'bad' code etc.81 $tmp_key = $key;82 unset ($source[$key]);83 $key = $this->remove($this->decode($key));84 if ($key != $tmp_key) {85 return $source;86 } else {87 if (is_string($value)) {88 $source[$key] = $this->remove($this->decode($value));89 } elseif (is_array($value)) {90 $source[$key] = $value;91 }92 }93 return $source;94 // clean this string95 } else96 if (is_string($source)) {97 // filter source for XSS and other 'bad' code etc.98 return $this->remove($this->decode($source));99 // return parameter as given100 } else101 return $source; Es müsste heissen:
77 // clean all elements in this array78 if (is_array($source)) {79 foreach ($source as $key => $value){80 // filter element for XSS and other 'bad' code etc.81 $tmp_key = $key;82 unset ($source[$key]);83 $key = $this->remove($this->decode($key));84 if ($key != $tmp_key) {85 return $source;86 } else {87 if (is_string($value)) {88 $source[$key] = $this->remove($this->decode($value));89 } elseif (is_array($value)) {90 $source[$key] = $value;91 }92 } }93 return $source;94 // clean this string95 } else96 if (is_string($source)) {97 // filter source for XSS and other 'bad' code etc.98 return $this->remove($this->decode($source));99 // return parameter as given100 } else101 return $source; Ausserdem frage ich mich, ob es Sinn macht, die Verarbeitung des Arrays abzubrechen, wenn ein "malformed" Key gefunden wurde (Zeile 84+85). Das heisst, alle weiteren Werte werden nicht mehr überprüft.
So ähnlich verhält es sich in den Zeilen 89+90. Wenn $value ein Array ist, dann wird es ungeprüft zurückgegeben.
Sehe ich das so richtig? Wenn ja, dann müsste diese Routine dringend überarbeitet werden.
Grüße
Harvey
Linkback: https://www.modified-shop.org/forum/index.php?topic=4283.0