Thread RegEx Problem bei Test auf richtige File-Extension (19 answers)
Opened by cbxk1xg at 2004-06-06 05:42

cbxk1xg
 2004-06-06 05:42
#2699 #2699
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Hallo Freunde der Sonne,

Ich habe mir bei meinem kleinen Uploadscript jetzt folgendes zusammengereimt:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use CGI qw/:standard/;
my $UploadDir = $TEMP_DIR;
$CGI::POST_MAX=1024 * $MaxSize;

my ($filename) = param('attachment') || "undefined";

my $serverFile = $UploadDir . "/" .
(split(/[\\\/]/, param('attachment')))[-1];

# Datei umbenennen mit Zufallszahl
$RandomID = sprintf("%d%d",time,rand(999999));
$serverFile =~ s-(.*?)\.(.*?)-$RandomID.Ū-g;

my $tempfile = "$UploadDir/$serverFile";

# Testen ob die Extension erlaubt ist.
$Extensions = '.gif .GIF .jpg .JPG .pdf .PDF .png .PNG .zip .ZIP';
# In der folgenden Zeile steckt wohl der Fehler...
if (grep($serverFile,$Extensions,(split/\./,$_))) {&program_error("The extension of the file is not valid.");}

if (-e $tempfile) {&program_error("File is already existing. $!");}

else
{
my $buffer;
open (FILE,">$tempfile");
#binmode(FILE); # Windows OS hack
#binmode $filename; # Windows OS hack
while (my $bytesread=read($filename,$buffer,1024)) {print FILE $buffer;}
close (FILE);
}

chmod (0744, "$tempfile");

# Nur zum Test
print "Content-type:text/html

";
print "Upload succeed.
";
exit;


Ich will natürlich verhindern das irgendein Spaßvogel .exe oder .vb Dateien hochlädt und wollte nun eigentlich mit...
Code: (dl )
if (grep($serverFile,$Extensions,(split/\./,$_))) {&program_error("The extension of the file is not valid.");}

testen, ob die Dateiendung erlaubt ist. Dabei wollte ich die Dateiendungen ganz bewusst in $Extensions speichern, weil ich diese Variable später in einer externen Config-Datei speichern will. Leider bringt mein Code immer ein negatives Erbniss, selbst wenn die Dateiendung erlaubt ist.

Des weiteren wollte ich eigentlich noch testen, ob der Dateiname komische Zeichen enthält wie etwa : !"§$%&/()=?`; Dazu fällt mir aber nix gescheites ein außer:
Code: (dl )
if($serverFile !~ /^[a-z\.\-_]+?\.([a-z]{3})$/) {&bla;}
\n\n

<!--EDIT|cbxk1xg|1086486225-->

View full thread RegEx Problem bei Test auf richtige File-Extension