Thomas Schmieder: Dateiupload => Vorischt bei gleichem Namen!

Beitrag lesen

Hallo Marco,

http://aktuell.de.selfhtml.org/artikel/phpasp/php-uploadcheck/index.htm#a4

Den Artikel will ich noch um eine dicke Warnung ergänzen:

Lasse niemals zu, dass jemand eine Datei auf Dein System hochlädt und den Zielnamen selbst bestimmt. Du musst zumindest einige Dateitypen ausschließen. Stell Die mal vor, da lädt Dir eine Datei "DeleteAll.php" auf Dein System hoch. Der Name isart dabei sogar ganz unerheblich, er soll nur zum Ausdruck bringen, was die Datei so macht. Die Endung ist hier keinesfalls egal. Wenn Dein PHP-Parser auf alle Dateien mit den Endungen *.php, *.html, *.privat reagiert, dann solltest Du solche "Uploads" nicht zulassen.

Zur Namensvergabe:

$thefile Pfad und Name der Datei wie sie im Filesystem zu finden ist. (meistens in der Form /tmp/php234lksdaflk)

$thefile_name Der Name der Datei, wie sie auf dem Clientsystem genannt wurde

In "$thefile" steht der Name der temporären Datei auf dem System.
In "$thefile_name" steht der Name der Datei auf dem Client. Aber nur dann, wenn die PHP-Version nicht zu neu ist. Da gibt es einen Bug. Musst hier mal im Forum nach "PHP-Version Bug" suchen.

Lass Dir die Variablen mal mit "echo" ausgeben, dann weißt Du, ob sie richtig ankommen.

Mit

$rights = umask(0460);  // kann auch 0600 sinnvoll sein
$OK = copy($thefile,$zielpfad.$thefile_name);
if ($OK)
{
  chgrp($zielpfad.$thefile_name,$NewGroupName); // neue Gruppe der Datei
}

kopierst Du die Datei dann an die passende Stelle.

Eigentümer (u) der Datei wird immer der PHP-Deamon (wwwrun). Den kannst du nicht ändern. Die Gruppe kann und sollte sofort nach dem Kopieren angepasst werden, damit DU z.B. auch per ftp rankommst an die Datei.

Die Rechte für others sollten immer auf 0 eingestellt werden.

Wenn Du das jetzt nachbaust, müsste es klappen.

Grüße aus http://www.braunschweig.de

Tom