Thread Weitergabe von Variablen an CGI-Skript (6 answers)
Opened by gmafx at 2010-10-22 21:50

topeg
 2010-10-23 20:12
#142137 #142137
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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)

View full thread Weitergabe von Variablen an CGI-Skript