Perl - Parameter

Hey,

wie sieht der Befehl aus, wenn ich in einer HTML-Seite einen Link auf ein Perl-Script habe, was eine Text-Datei öffnet und ich den Namen der Text-Datei als Parameter übergeben will.
Falls das nicht möglich sein sollte, was gibt es noch für Möglichkeiten?

Dieter

Selber Hey

[Skriptlink mit Params](http://www.zielserver.de/cgi-bin/skript.pl?param1=eins&param2=zwei&param3=drei)

Alles klar? Holli

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

aaaaalso:
aufruf über
http://www.server.de/cgi-bin/script.cgi?datei.txt

im Perl Script kannst Du dann die Datei über die Variable $ENV{‚QUERY_STRING‘} abfragen… pass aber auf, dass Du damit nicht Hackern Tür und Tor öffnest. Du solltest beschränken welche Verzeichnisse geöffnet werden dürfen usw… auch solltest Du sowas verhindern:
http://www.server.de/cgi-bin/script.cgi?../…/…/…/…

Gruß
Arne

Hallo,

aaaaalso:
aufruf über
http://www.server.de/cgi-bin/script.cgi?datei.txt

Das ist falsch. Man muß immer Name/Wert-Paare definieren.
Also ?datei=datei.txt

im Perl Script kannst Du dann die Datei über die Variable
$ENV{‚QUERY_STRING‘} abfragen… pass aber auf, dass Du damit
nicht Hackern Tür und Tor öffnest. Du solltest beschränken
welche Verzeichnisse geöffnet werden dürfen usw… auch
solltest Du sowas verhindern:

Auch das ist nicht optimal. Für CGI benutzte man IMMER das Modul CGI.pm, oder, wenn man nur die Anfragefunktionen nutzen will, CGI::Request. Das filtert alle „Nettigkeiten“ aus dem Query-String und kopiert nebenbei auch alle Eingabedaten in einen hash.
Bsp:

use CGI;
my $q=new CGI;
foreach $l ($q-\>param) { print $l.' = '.$q-\>param($l)."\n"; }

Dies druckt alle Parameter in Name/Wert-Paaren auf STDOUT.

Diese $ENV-Scheisse sollte man einfach vergessen.

http://www.server.de/cgi-bin/script.cgi?../…/…/…/…

toter link???

cu, holli

ps. mein vorheriger Artikel wurde von w-w-w zerrissen. Du mußt die Tab-Zeichen durch Ampersands (Und-Symbol) ersetzen.

Hi,

Das ist falsch. Man muß immer Name/Wert-Paare definieren.
Also ?datei=datei.txt

bloedfug. muss man nicht.

Auch das ist nicht optimal. Für CGI benutzte man IMMER das
Modul CGI.pm, oder, wenn man nur die Anfragefunktionen nutzen
will, CGI::Request. Das filtert alle „Nettigkeiten“ aus dem
Query-String und kopiert nebenbei auch alle Eingabedaten in
einen hash.

Ist einfach und recht sicher ja. aber es geht auch ohne. und weil ich weiss, das es mit der ungefilterten QUERY_STRING Sicherheitsprobleme geben kann, habe ich das auch dazugeschrieben. ABER:
Je nachdem was er da macht, kann das auch über die QUERY_STRING sicher gehen, bzw. mit ein paar einfachen Rewrites u.ä. sicher gemacht werden.

Diese $ENV-Scheisse sollte man einfach vergessen.

Warum ?

http://www.server.de/cgi-bin/script.cgi?../…/…/…/…

toter link???

Du scheinst nicht ganz verstanden haben, was ich damit sagen wollte. Wenn Du ein Script baust, mit dem man Textdateien an den Browser schickt, und den Pfad / Dateinamen als Parameter übergibt, muss man dafür Sorge tragen, dass auch nur die Dateien angezeigt werdne können, die gewollt sind. Sonst kann man (z.B. über eine Konstruktion wie die obige) sich Datein anzeigen lassen, die sicher nicht angezeigt werden sollten…
Un da hilft dir auch kein CGI Modul.

Arne

Hi,

Das ist falsch. Man muß immer Name/Wert-Paare definieren.
Also ?datei=datei.txt

bloedfug. muss man nicht.

ok du hast recht. sollte man aber. ist in meinen Augen einfach „runder“. Ansonsten hast du ja eine Variable ohne Wert.

[…]

Ist einfach und recht sicher ja. aber es geht auch ohne. und
weil ich weiss, das es mit der ungefilterten QUERY_STRING
Sicherheitsprobleme geben kann, habe ich das auch
dazugeschrieben. ABER:
Je nachdem was er da macht, kann das auch über die
QUERY_STRING sicher gehen, bzw. mit ein paar einfachen
Rewrites u.ä. sicher gemacht werden.

Warum einfach wenns auch kompliziert geht?

Diese $ENV-Scheisse sollte man einfach vergessen.

Warum ?

Um das Rad nicht zum 19976432. Mal zu erfinden

http://www.server.de/cgi-bin/script.cgi?../…/…/…/…

toter link???

Du scheinst nicht ganz verstanden haben, was ich damit sagen
wollte. Wenn Du ein Script baust, mit dem man Textdateien an
den Browser schickt, und den Pfad / Dateinamen als Parameter
übergibt, muss man dafür Sorge tragen, dass auch nur die
Dateien angezeigt werdne können, die gewollt sind. Sonst kann
man (z.B. über eine Konstruktion wie die obige) sich Datein
anzeigen lassen, die sicher nicht angezeigt werden sollten…
Un da hilft dir auch kein CGI Modul.

Ja klar. Aber du hast auch was nicht verstanden (glaub ich). Ich denke es ging dem Mann mehr um die ART der Parameterübergabe mit (link?..&…&amp:wink:

holli