Sönke Tesch: Was mache ich falsch? (If Abfrage)

Beitrag lesen

$thumbnailsfolder = $_GET['thumbnails'];
$galeriefolder = $_GET['folder'];
if(file_exists("$thumbnailsfolder/0.jpg"))
echo "<a href="bildzeigen.php?url=$galeriefolder/0.jpg"><img src="$thumbnailsfolder/0.jpg" border="0"></a>";
else
echo "<img src="http://www.meinedomain.de/blank.gif" border="0">";

[..] wenn das Bild nicht existiert, NICHT das Bild blank angezeigt wird, sondern gar keines.

Soll heißen, er führt immer die erste Anweisung aus, nie den else-Zweig? Prüfe, was genau "$thumbnailsfolder/0.jpg" enthält, verlasse Dich nicht auf "na wenn ich hier dann muß ja da", sondern gibt den Inhalt per var_dump() oder echo() aus. Der Code scheint richtig, das naheliegendste Problem wäre danach der Pfad.

Davon unabhängig solltest Du tunlichst alles, was von draußen kommt (sprich: Inhalte von $_GET also auch $_POST, $_SERVER, $_COOKIE, $_ENV) nur durch htmlentities() ausgeben. Im vorliegenden Fall mag es nicht so schlimm sein, aber Du wärest nicht der erste, dem man mit dem Text '"><script>while (true) alert("Bäh!");</script><"' die Seite zerlegt hat.
Ähnliches gilt für Deinen sorglosen Umgang mit Pfadnamen. file_exists() ist kein allzu großes Problem, trotzdem solltest Du Dich _immer_ vergewissern, daß Dir niemand "../../../../../etc/passwd" oder ähnliche lustige Dinge unterjubelt (mit obigem Beispiel kommt man an die Nutzerdaten des Servers).

Gruß,
  soenk.e