Hi Mathi.
Biite immer daran denken: Die meisten Angriffe kommen aus dem eigegen Netzwerk. Soll heißen, dass auch authorisierte Benutzer böse Menschen sein können, die ihren Schabernack treiben wollen.
Gast+2007-12-06 11:20:58--
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
42
43
44
use strict;
use warnings;
use CGI::Carp qw/fatalsToBrowser/;
use CGI qw/:cgi/;
my $SID = "PHPSESSID";
my $cgi = new CGI;
exit if (
$cgi->param($SID) =~ |/\.\./| or
$cgi->param('filename') =~ |/\.\./|
);
$cgi->param($SID) =~ s/[^a-zA-Z0-9]//g;
my $upload_dir = "$ENV{DOCUMENT_ROOT}/upload_fraeszentrum/";
my $tmp_dir = "$ENV{DOCUMENT_ROOT}/cgi-bin/tmp/";
my $session_dir = $tmp_dir.$cgi->($SID);
Und dann der eigentliche Upload.
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
42
43
44
45
46
47
48
49
50
if(-d $session_dir){
my $file_name = $cgi->param("filename");
$file_name =~ s/.*[:\/\\](.*)/$1/;
my $upload_file_path = $upload_dir.$file_name;
my $upload_filehandle = $cgi->upload("filename");
my $tmp_filename = "upl_".$$.$file_name;
use Fcntl qw/:flock/;
$CGI::POST_MAX = 1024 * 2048;
open F, ">", $tmp_filename || &err_msg ( $upl_err."<br>$!" );
flock F, LOCK_EX;
binmode $tmp_filename;
binmode F;
while ( read $tmp_filename, my $buf, 1024 ) { print F $buf; }
flock F, LOCK_UN;
close F;
unless ( &chk_filecontent($tmp_filename) ) { exit; }
else {
use File::Copy;
print "Moving File to Upload Directory -> ";
if ( move ( $tmp_filename, $upload_file_path ) ) {
print "<b style='color:green;'>Success</b><br>";
}
else {
print "<font color='red'>Failure</font><br>";
}
}
}
sub chk_fileconent {
$file = shift || return;
return ($file eq "OK") ? 1 : 0;
}
Abschließend:
Man kann zwar Dateien auch mit
rename Verschieben, aber es ist nicht wirklich dafür geeignet. Man sollte damit lediglich Dateien umbenennen.
Das Modul
File::Copy verwendet die tatsächlich zu Grunde liegenden Betriebssystemfunktionmen.
Hoffe ich konnte ein wenig Licht ins Dunkle bringen.
-uw
EDIT:
Habe mir das Skript mal gezogen und angeschaut. Also das gehört in der Tat überarbeitet. ;)
Vielleicht liegt's auch an der Shebang-Teile. Check mal Dienen Webspace, bzw. Server, wo der Perlinterpreter steckt.
-uw