Seite 1 von 1

Ist das Script so sicher?

Verfasst: 01.06.2006 14:31
von fanrpg
Hier mal das Script: http://www.fanrpg.com/code.php?id=1

Ich würde gerne wissen ob das sicher ist...
Nicht das einer irgendwie ne .php Datei hochlädt und so mein Forum hacken oder meinetwegen auch anders.

Weiss das jemand zufällig und könnte mal kurz drüber schauen?

Verfasst: 01.06.2006 15:09
von rkern

Code: Alles auswählen

$file = fopen('./scripts/script_'.$new_id.'.txt', 'w'); 
uninitialisierte Vairable $new_id: wenn register_globals gesetzt ist, kann man damit $new_id von aussen setzen und irgendwo in dein Filesystem schreiben.

mfg Ralph

Verfasst: 01.06.2006 15:21
von fanrpg
Danke :wink:
Habe jetzt mal einen allgemeinen Schutz vor register_globals eingebaut das müsste doch reichen?

Verfasst: 01.06.2006 15:30
von S2B
Ähm, und was machst du, wenn das nie ausgeführt wird:

Code: Alles auswählen

        if( !in_array($i, $lines_in_file) )
        {
            $new_id = $i;
            break;
        }
Dann ist $new_id undefiniert, er wirft einen Fehler und öffnet script_.txt.

Generell gilt: Ein genereller Schutz vor register_globals befreit dich nicht vom Vordefinieren von Variablen, wenn du guten Code schreiben willst.

Edit:
Außerdem funktioniert der Schutz soweit ich das sehe nicht:

Code: Alles auswählen

if( $name == $$name )
Müsste das erste $name nicht $value heißen?

Verfasst: 01.06.2006 15:38
von fanrpg
in $value steht doch dann der Inhalt von $name.
Aber ich suche ja den Namen von $name also in dem Fall $$name.
Der name der variable wird dann die variable so genannt.
Aber hast recht hab einen Fehler gefunden :D
Dann ist $new_id undefiniert, er wirft einen Fehler und öffnet script_.txt.
Ich definiere es dann einfach und gut ist.
Aber warum sollte der das nicht ausführen? steht ja nicht wirklich in einer if Klammer und 1000 Scripts muss man erstmal hinkriegen :D

Verfasst: 01.06.2006 15:48
von S2B
fanrpg hat geschrieben:in $value steht doch dann der Inhalt von $name.
Aber ich suche ja den Namen von $name also in dem Fall $$name.
Der name der variable wird dann die variable so genannt.
Aber hast recht hab einen Fehler gefunden :D
Moment...

Code: Alles auswählen

$_GET = array(
	'new_code' => 'Mein Code');

foreach ($_GET as $name => $value)
{
	/*
		- $name enthält 'new_code'
		- $value enthält 'Mein Code'
		- $$name ist die Variable mit dem Namen $name = 'new_code', sprich $new_code
		- $$name enthält, wenn register_globals auf on steht, den Wert der GET-Variable,
		  also $value oder auch 'Mein Code'
	*/
	if ($value == $$name)
	{
		unset($$name);
	}
}
fanrpg hat geschrieben:Aber warum sollte der das nicht ausführen? steht ja nicht wirklich in einer if Klammer und 1000 Scripts muss man erstmal hinkriegen :D
Ich meinte das, was in der if-Abfrage steht, sprich das Definieren der Variable $new_id.

Verfasst: 01.06.2006 16:39
von fanrpg
S2B hat geschrieben:
fanrpg hat geschrieben:in $value steht doch dann der Inhalt von $name.
Aber ich suche ja den Namen von $name also in dem Fall $$name.
Der name der variable wird dann die variable so genannt.
Aber hast recht hab einen Fehler gefunden :D
Moment...

Code: Alles auswählen

$_GET = array(
	'new_code' => 'Mein Code');

foreach ($_GET as $name => $value)
{
	/*
		- $name enthält 'new_code'
		- $value enthält 'Mein Code'
		- $$name ist die Variable mit dem Namen $name = 'new_code', sprich $new_code
		- $$name enthält, wenn register_globals auf on steht, den Wert der GET-Variable,
		  also $value oder auch 'Mein Code'
	*/
	if ($value == $$name)
	{
		unset($$name);
	}
}
fanrpg hat geschrieben:Aber warum sollte der das nicht ausführen? steht ja nicht wirklich in einer if Klammer und 1000 Scripts muss man erstmal hinkriegen :D
Ich meinte das, was in der if-Abfrage steht, sprich das Definieren der Variable $new_id.
Hmm hast recht, werde das mal ändern.