Andreas Görtz: mehrere Dateien immer im Frameset öffnen

Beitrag lesen

Hi,

  1. gibt es gegen diesen code irgendwelche einwände? ich bin leider kein experte auf diesem gebiet, habe mich deshalb etwas in diversen foren umgesehen und herausgefunden, dass es mit der übergabe einer variablen funktionieren könnte. bei mir klappts, nur wollte ich dazu gern noch eine expertenmeinung einholen.

ich möchte mich zwar nicht als Experten bezeichnen, sehe jedoch trotzdem Probleme in dem Code:

if($oe == "") {

[...]

if ($id != "ok") {

1. Du scheinst hier von der Einstellung register_globals = on Gebrauch zu machen, was keine gute Entscheidung ist (siehe http://de3.php.net/manual/de/security.registerglobals.php). Benutze statt dessen lieber die Superglobalen Arrays $_GET, $_POST, $_COOKIE oder $_REQUEST.

2. ...und wesentlich schlimmer:

$oe = stripslashes($oe); }

hier übernimmst du den Parameter, der in der Adresszeile steht, ohne Prüfung. Was hindert mich daran, deine index.php mit dem Parameter oe aufzurufen und ein wenig zu probieren. Z.B.:

index.php?oe=geheim/passwoerter.txt

Bei einem schlecht konfigurierten Webserver könnte man vermutlich sogar Dateien aus dem Dateisystem auslesen, indem man ein paar Ebenen runtergeht:

index.php?oe=../../../beliebigesverzeichnis/beliebigedatei

Um das zu verhindern, solltest du dir mal die Funktion basename() ansehen (http://de3.php.net/manual/de/function.basename.php), also z.B. in der index.php:

if (isset($_GET['oe'])) {

$oe = basename($_GET['oe']);

} else {

$oe = "index2.php";

}

Wenn du dann

<frame src="<?php echo $oe; ?>?id=ok" />

benutzt, sorgt dies dafür, dass in obigen Beispielen jeweils nur auf das Verzeichnis, welches du für die öffentlichen Dateien vorgesehen hast (in diesem Fall also das, in dem auch die index.php liegt), zugegriffen werden kann. Zusätzlich könntest du soger noch mittels file_exists(basename($_GET['oe'])) (http://de3.php.net/manual/de/function.file-exists.php) abfragen, ob die gewünschte Datei überhaupt existiert - wenn nicht, kannst du eine eigene Fehlermeldung ausgeben.

  1. das problem, dass sich mir jetzt im anschluss stellt, ist, wie mache ich diesen code für mehrere dateien tauglich, die in das frameset geladen werden könnten, z.b. eine index3.php. da im frameset oben ja die index2.php angegeben ist, müßte man also den dateinamen der aufgerufenen datei irgendwie in das frameset übergeben. geht so etwas?

Das müsste doch schon gehen - du rufst die index.php einfach mit dem Parameter ?oe=index3.php auf...

Gruß,
Andreas.