Sebastian: Perl von externer Eingabe ausführen

Hi Leute

ist es eigentlich möglich über ein Eingabeformular, welches an ein Perlscript gebunden ist, von außen über dieses Eingabeformular Befehle einzugeben ?

Also etwa so eval(irgendwas);

Oder direkt $Varname; -> $eingabe

Wenn danach die Daten verarbeitet werden, sollte ja auch diese Eingabe bei Print "$eingabe"; -> Inhalt von $Varname wird ausgegeben

Oder wird $ vorher intern noch codiert, sodass Perl diesen String nicht als Variablenname erkennt?

In meinem Script ist das eigentlich nicht der Fall. Dort wird %24 in $ umgesetzt.

Oder ist das sicherhaltshalber über die Pipes gesperrt ?

  1. Moin,

    ist es eigentlich möglich über ein Eingabeformular, welches an ein Perlscript gebunden ist, von außen über dieses Eingabeformular Befehle einzugeben ?

    Ja, aber Vorsicht! Wenn eingegeben werden kann
    ls -l

    und das PERL/CGI das Ergebnis
    $ergebnis = qx(ls -l);
    ausgibt ist das ok.

    Aber, jetzt gibt einer ein:
    ls -l | rm -f *

    dann wird letztendlich ein rm -f * gemacht.

    Besser: Die Kommandos nicht frei eingebbar zu machen sondern fest codieren, siehe Bsp. weiter unten

    Rolf

    =cmd.cgi, kontrolle Acces_log im Browser
    #!/usr/bin/perl

    Eigene Systemkommandos definieren

    Rolf Rost, 13.9.2002

    %cmds = (
     "err_tail_005","tail -5 /home/netlab/logs/error.log",
     "err_tail_010","tail -10 /home/netlab/logs/error.log",
     "err_tail_020","tail -20 /home/netlab/logs/error.log",
     "err_tail_050","tail -50 /home/netlab/logs/error.log",
     "err_tail_100","tail -100 /home/netlab/logs/error.log",
     "trans_tail_005","tail -5 /home/netlab/logs/transfer.log",
     "trans_tail_010","tail -10 /home/netlab/logs/transfer.log",
     "trans_tail_020","tail -20 /home/netlab/logs/transfer.log",
     "trans_tail_050","tail -50 /home/netlab/logs/transfer.log",
     "trans_tail_100","tail -100 /home/netlab/logs/transfer.log",
    );
    ###########################################################################
    if($ENV{'QUERY_STRING'}){
     print "Content-type:text/plain\n\n";
     $cmd = $cmds{"$ENV{'QUERY_STRING'}"} or err("Parameter nicht erlaubt!!!");
     $v = qx($cmd) or err("Es wurde keine Ausgabe erstellt.");
     print "$cmd\n\n$v\n";

    }
    else{
     print "Content-type:text/html\n\n";
     print qq( <h2> Commands for my server </h2>);

    foreach $key(sort keys %cmds){
      print qq([<a href="$ENV{'SCRIPT_NAME'}?$key"> $key </a>]\n);
     }

    }

    sub err{
     print $_[0];
     exit;
    }

    exit;

    =cut

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?