Hallo,
Durch die Tatsache, dass mein Uploadscript umgangen werden konnte, und eine .zip Datei als unbenannte .jpg hinaufgeladen werden konnte, will ich jetzt noch zusätzlich alle Uploads mit Image::Size überprüfen.
ich kann dir zwar bei Image::Size nicht helfen, aber dir zumindest zeigen, wie ich den Test auf JPEG-Format durchführe:
my $fh = $q->upload('signature');
if (defined $fh && ! $error) {
my $buffer;
$tempfile = md5_base64 ($vars{prename} . $vars{name} . $vars{mail} . rand(10));
$tempfile =~ s!/!!g;
$tempfile =~ s!\!!g;
open TEMPFILE, ">$tempfile" or die "Opening temporary file $tempfile: $!";
binmode TEMPFILE;
while (read ($fh, $buffer, 1024)) {
print TEMPFILE $buffer;
}
close TEMPFILE;
my $size = (stat $tempfile)[7];
if ($size > 50 * 1024) { $error .= "Die Unterschriftendatei darf maximal 50 KB groß sein\n"; }
unless ($error) {
my $mm = new File::MMagic;
my $mime = $mm->checktype_filename($tempfile);
if ($mime ne 'image/jpeg') { $error .= "Die Unterschrift muss als JPEG Bild hochgeladen werden. Die gewählte Datei wurde als $mime erkannt.\n"; }
}
unlink $tempfile if ($error);
}
Wenn du danach weißt, dass es ein JPEG Bild ist, dann kannst du ja Image::Size drauf loslassen und es sollte klappen.
Viele Grüße,
Stefan