Hello,
Was hälst du denn von der Möglichkeit, dass ich beim Upload eine Zufallszahl generieren lasse, die auch in die DB eingetragen wurde und beim Auslesen/Download wird zuerst geprüft ob z.B. id, Bildname und Zufallszahl zusammen passen?
Das hält aber trotzdem niemanden davon ab, als Bildernamen "/etc/passwd" einzugeben.
Diese Lücke fängst Du auch durch dein $basedir nicht ab. Man muss dann nur etwas mehr probieren:
Bildname = "../../../../../../../../../etc/passwd"
sollte fürs erste genügen.
Solche Einträge finde ich Zuhauf in meinem Error-Log.
Allerdings kommen die nicht sehr weit, weil ich mindestens mit der Funktion basename() http://de3.php.net/manual/de/function.basename.php den Filenamen aus dem Parameter extrahiere. Da interessieren die Rückschritte dann gar nicht mehr.
Deine $_filelist solltetst Du so aufbauen:
$_filelist["externer_name1"] = interner_name1;
$_filelist["externer_name2"] = interner_name2;
$_filelist["externer_name3"] = interner_name3;
Das wolltest Du sicher mit dem $_GET['bild'] => $name erreichen. Aber überleg mal, wenn der User den externen Namen selber festlegen darf, dann passt doch jeder!
Und dann passt auch Deine Abfrage:
if (!isset($_filelist[$_GET["bild"]])
{
echo "Böder Bube, Du...";
exit;
}
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen