Hi,
Ich habe folgendes Problem:
Per Formular und Perl mache ich einen FileUpload. Nun ist es so, dass, wenn ich eine Datei von Windows hochlade der ganze Pfad als Dateinname angegeben wird, also z.B. "C:\Verzeichnis\bild.jpg" anstatt nur "bild.jpg". Auf einem Mac funktionierts aber.
Weiss jemand Rat?
Du brauchst mehr Rat :)
Frage mal: Koennte nicht ein boeser Mensch -wie z.B. ein BWfH-
auf die Idee kommen, ein modifiziertes Formular und modifizierte Dateinamen fuer den Upload zu verwendden um eine Datei mit so einem Namen aufzurufen:
"blafasel.txt|rm+-Rf+*"
(Das testest du jetzt aber nicht aus!!!!)
Wie auch immer: Sorg dafuer das alle Eingaben der
User nichts anrichten koennen.
Unten ein Vorschlag:
...
$fname =~ s/[a-z-A-Z0-9-_/\:.]+//gi;
Loesche gefaehrliche Zeichen und sonstigen Muell, der nicht
in einem Dateinamen gehoert.
my @parts = split(/[/\]+/,$fname);
Splitte das Ding auf
my $filename = pop(@parts);
Nehm das letzte Teil
if (-r "$SAVE_DIRECTORY/$fname") {
print STDERR "Ueberschreibe alte Datei...\n";
}
open(DAT, ">$SAVE_DIRECTORY/$fname") || print STDERR 'Error processing file: ',$!;
...
Uebrigens ist ein die()-Aufruf in ein CGI-Skript unschoen.
Ciao,
Wolfgang