Thread Weitergabe von Variablen an CGI-Skript
(6 answers)
Opened by gmafx at 2010-10-22 21:50
Das Script mal etwas moderner geschrieben:
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #!/usr/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser); use strict; use warnings; my $link_cgi='/cgi-bin/link.cgi'; my $name=$ENV{'REMOTE_USER'}; my $dir="/Library/WebServer/Documents/$name"; # neue CGI Instanz erzeugen my $cgi=CGI->new(); # Verzeichnis auslesen opendir (my $dh, $dir) or die "ERROR OPENDIR: $!"; # hole alle Verzeichnisse (-d) die "ome" (/ome/) im namen haben und sortiere (sort) sie. my @folders = sort grep {/ome/ && -d "$dir/$_"} readdir($dh); closedir($dh); # kein Ordner gefunden if(!@folders) { print $cgi->header(), $cgi->start_html('no data'), $cgi->h1('keine Daten vorhanden!'), $cgi->hr; $cgi->end_html; } # nur ein ordner gefunnden elsif(@folders==1) { # url zusammensetzen: my $uri="$link_cgi?ordnermenu=$folders[0]"; print $cgi->redirect( -uri=>$uri, -nph=>1, -status=>302 ); } else { print $cgi->header(), $cgi->start_html('Test'), $cgi->h1('test'), $cgi->start_form( -name => 'main_form', -method => 'POST', -enctype => &CGI::URL_ENCODED, -action => $link_cgi, ), $cgi->p( "Ordner auswaehlen :" ), $cgi->p( $cgi->popup_menu('ordnermenu', [@folders]) ), $cgi->p( $cgi->submit() ), $cgi->end_form, $cgi->hr; if (my @ordner=$cgi->param('ordnermenu')) { print $cgi->em(join(", ",@ordner)), $cgi->hr; } print $cgi->end_html; } Noch eine bemerkung dazu die Namen der Ordner zu benutzen. Das ist recht gefährlich da wenn man nicht aufpasst. Der Nutzer hat unter Umständen Zugriff auf alle für ihn lesbaren Ordner. Mal als Beispiel: der Nutzer tippt etwas der Art: /cgi-bin/link.cgi?ordnermenu=../../../../etc/ das würde ihn auf einem LinuxSystem in den Ordner mit allen Konfigurationen des Systems leiten. Er könnte dort die Namen aller anderen Nutzer heraus finden, sich die Konfiguration von Apache ansehen usw. Das kann eine schwere Sicherheitslücke sein wenn man nicht sehr vorsichtig ist. EDIT: Ähnliches gilt Übrigens auch für $ENV{'REMOTE_USER'} da der Name als Ordnername ohne Überprüfungen eingesetzt wird. wird lustig wenn jemand einen Namen wie "../../../../etc/" hat :-) Last edited: 2010-10-24 11:15:53 +0200 (CEST) |