Viele von euch kennen sicherlich die Möglichkeit, mittels Schleife einen String zu erweitern. Ganz normal und völlig unbedenklich, solange man ein paar Regeln beachtet. Vor allem, wenn es um MySQL-Querys geht und register_global in eurer php.ini fahrlässigerweise auf "on" steht.
Ein Beispiel:
Code:
for($i = 0; $i < $max; $i++) {
$string .= $array[$i];
}
Was das Beispiel macht, muss ich nicht erklären, sondern nur die Gefahr, die davon ausgeht. Man kann, solange register_global auf "on" steht, die Variablen am Anfang eines Scriptes als User manipulieren. Dabei reicht es, selbst ein Cookie zu setzen, das zum Beispiel "$string" bereits mit einem Wert füllt. Wird nun $string in ein Query eingepflanzt, so kann das böse Folgen haben. Nebenbei wird auch noch eine Notiz geworfen, solange error_reporting() auf E_ALL steht. Um dem entgegen zu treten, reicht es, die Variable vor der Schleife zu deklarieren. Dabei gibt es zwei Möglichkeiten:
Code:
$string = '';
for($i = 0; $i < $max; $i++) {
$string .= $array[$i];
}
Und:
Code:
for($i = 0, $string = ''; $i < $max; $i++) {
$string .= $array[$i];
}
Beide sind gleichwertig, für welche ihr euch entscheidet ist eure Sache.
PS: Die Notiz, die geworfen wird, klingt in etwa so:
Zitat:
Notice: Undefined variable: string in ~/test.php on line 7