use strict; use warnings; use CGI::Carp qw/fatalsToBrowser/; use CGI qw/:cgi/; # Schon hier oben muss CGI instanziert werden, weil es automatisch auch den # QureyString zerlegt. Siehe weiter unten. my $SID = "PHPSESSID"; # Hier dann Eintragen was die PHP Anwendnung verwendet. my $cgi = new CGI; ## Get Unique ID Passed from PHP # Also erst mal Directory Traversal Attacks abchecken !!! # Und natürlich auch im Dateinamen, weil ein Angreifer das in seinem # Tool dort geschickt einbaut. exit if ( $cgi->param($SID) =~ |/\.\./| or $cgi->param('filename') =~ |/\.\./| ); # Und aussteigen wenn das einer versucht, denn dann braucht Dein # Skript überhaupt nichts mehr machen. Solche Sachen am besten # gleich zu Anfang des Skriptes, noch vor den Variablen Insitialisierung. # Und den split hier kann man sich dann sparen, weil der die RegEx Engine # jetzt nochmal anwirft. # my $sid = (split(/[&=]/,$ENV{QUERY_STRING}))[1]; $cgi->param($SID) =~ s/[^a-zA-Z0-9]//g; ## Define Directory Paths (Must be Absolute Paths) # Stings nur dann contantenieren, wenn es sich überhaupt nicht vermeiden # lässt. Evaluieren muss Perl diese sowieso. 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 das tmp würde ich im cgi-bin Verzeichnis anlegen, weil man daraus keine # statischen Inhalte abrufen kann. So kann da keiner einfach mal reinschnuppern. # Einer der Gründe warum ich CGI/Perl so liebe. Man braucht sich da keinen Kopf # um .htaccess und so 'ne Sachen machen :D