Tom: Datei Upload über den Browser - Fehler

Beitrag lesen

Hello Mario,

Dein Script enthält die verschiedensten Fehlerquellen und Gefahrenpotentiale. Ich versuche mal, darauf einzugehen:

ich habe folgendes Formular:

<form enctype="multipart/form-data" action="upload.php" method="post">
<input name="file" type="file"><br>
<input type="submit" value="hochladen">

Der Button sollte durchaus einen Namen bekommen und der

Kopiervorgang auch nur durch den Button ausgelöst werden.

</form>

Die Datei upload.php sieht folgendermaßen aus:

<?php

Es werden Posts von jedermann angenommen.

Man sollte die Benutzer, die etwas hochladen dürfen

autentifizieren können

$tempname = $_FILES['file']['tmp_name'];
$name .= $_FILES['file']['name'];

$type = $_FILES['file']['type'];

Der übermittelte Type kann gefälscht sein, insbesondere

unter Berücksichtigung des "offenen Scriptes". Man kann das

Script ohne Aufwand mit einem anderen Script bedienen

$size = $_FILES['file']['size'];

if($type != "image/gif" && $type != "image/pjpeg")

Ich würde an dieser Stelle lieber $imgdata = getimagesize()

benutzen (1 = GIF, 2 = JPG, 3 = PNG, SWF = 4)

$imgdata[2] == 1 -> GIF,

Die Funktion wertet tatsächlich den Datei-Header aus

{

$err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden.";
}
if($size > "15000")

{

$err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!";
}

echo $name;

If(empty($err))

{

copy("$tempname", "$name");

hier fehlt:

##   $cpok=copy($tempname, $path."/".$name);
##   if (!cpok)
     {
       $err[] = "Fehler beim Kopieren der Datei.";

}

else
     {
       $err[] = "Datei wurde kopiert";
     }
   }

{

foreach($err as $error)
  echo "$error<br>";
}
?>

Und hier die Fehlermeldung vom Server:
hamster.jpg
Warning: copy(hamster.jpg): failed to open stream: Permission denied in /var/www/web98/html/admin/werbung/upload.php on line 18
Die Datei hamster.jpg wurde erfolgreich hochgeladen!

Entweder durfte der Apache mit dem copy()-Befehl die Quelle nicht öffen oder das Ziel nicht anlegen oder sogar beides. Zweiteres ist wahrscheinlicher. Der Webserver (PHP) muss im Zielverzeichnis Schreibrechte haben.

Viele Grüße nach Ulm

Tom