Wertübergabe an CGI aus shtml Aufruf
Andrushka
- cgi
0 Mirko Schenk0 Stefan
Hallo Freunde,
ich habe inzwischen erraten, daß ich mit
<!--#set var="QUERY_STRING" value="name=andreas&beruf=student"-->
eine Umgebungsvariable in einer shtml Datei setzen kann und dann mit
<!--#echo var="QUERY_STRING"-->
auch tatsächlich diesen Wert wiederbekomme.
Nur wenn ich danach eine cgi-Datei aufrufe mit
<!--#exec cgi="hallo.cgi"-->
scheint diese Umgebungsvariable durch diesen Aufruf schon wieder ersetzt, jedenfalls ist diese Variable leer.
Frage also: Wie übergebe ich bei einem Aufruf der obigen Form Parameter mit get oder post?
Vielen Dank,
Andreas
Hallo!
Frage also: Wie übergebe ich bei einem Aufruf der obigen Form Parameter mit get oder post?
Bei "POST" werden, wenn ich mich richtig erinnere, die Parameter sowieso "durchgeschleift", und bei GET kannst du die Parameter ganz einfach hintendran hängen (siehe auch <../../sfausles/tsfa_teb.htm>)
Ciao,
Mirko
Danke Mirko, aber
ich hatte das bereits versucht, ich bekomme die Fehlermeldung
[an error occurred while processing this directive]
Ich sollte vielleicht dazu erwähnen, daß das script nicht im
/cgi-bin - Verzeichnis liegt, sondern lokal beim rufenden shtml, weil /cgi-bin bei uns nicht existiert (Servereinstellungen, in der Uni nicht von mir beeinflußbar). GET ist jedoch erlaubt (POST ist verboten).
Andreas
[an error occurred while processing this directive]
Klingt nach versuchter, aber gescheiterter Ausführung der SSI-Anweisung.
Ich sollte vielleicht dazu erwähnen, daß das script nicht im
/cgi-bin - Verzeichnis liegt, sondern lokal beim rufenden shtml, weil /cgi-bin bei uns nicht existiert (Servereinstellungen, in der Uni nicht von mir beeinflußbar). GET ist jedoch erlaubt (POST ist verboten).
Und hat Dein Verzeichnis explizit CGI-Berechtigung? Ruf mal Dein CGI-Skript direkt über die URL-Zeile des Browsers auf - das muß ja ebenfalls gehen, wenn Du CGI darfst. Die SSI-EXEC-Einbindung ist ja nur ein Schmacko mehr.
Und hat Dein Verzeichnis explizit CGI-Berechtigung? Ruf mal Dein CGI-Skript direkt über die URL-Zeile des Browsers auf - das muß ja ebenfalls gehen, wenn Du CGI darfst. Die SSI-EXEC-Einbindung ist ja nur ein Schmacko mehr.
So ist es... noch ein paar kleine Hinweise:
Ciao,
Mirko
Und hat Dein Verzeichnis explizit CGI-Berechtigung? Ruf mal Dein CGI-Skript direkt über die URL-Zeile des Browsers auf - das muß ja ebenfalls gehen, wenn Du CGI darfst. Die SSI-EXEC-Einbindung ist ja nur ein Schmacko mehr.
wenn ich's über die url-Zeile aufrufe, bekomme ich nur den perl-Quelltext ausgegeben. Sieht so aus, als würde ich mit SSI eine Sicherheitlücke ausnutzen, so daß ich das script aufrufen kann, obwohl es nicht in einem cgi-Verzeichnis liegt.
So ist es... noch ein paar kleine Hinweise:
- bei Unix-Rechnern Execute-Rechte für das Script setzen!
hab ich doch.
- Document-type nicht vergessen! Bei exec cmd wird kein http-Header benötigt (im Gegenteil, er würde ausgegeben...), bei exec cgi sehr wohl...
hab ich auch.
Also rekapitulierend: ich kann mein cgi aufrufen, obwohl das Verzeichnis kein cgi-Verzeichnis ist, aber NUR als SSI Einbindung in einer shtml Datei. Die Ausgabe ist html mit Header (klar).
Aus exec cgi=... kann ich NICHT mit &name=param&name2=param2 Parameter übergeben, weil ich dann eine Fehlermeldung bekomme. Das genau gleiche script läuft aber ohne Parameter.
Parameterübergabe per setzen von QUERY_STRING funktioniert nicht weil der beim Aufruf des Scripts geleert wird.
#include virtual=... gibt nur den Quelltext des cgi's aus, Stefan.
ABER (tattaaa...) Lösung:
Ich kann einfach eine Umgebungsvariable setzen, die NICHT Standard ist:
<!--#set var="MYOWN_STRING" value="name=andreas&beruf=student"-->
und dann mein script aufrufen
<!--#exec cgi="myscript.cgi"-->
in dem MYOWN_STRING abgefragt wird. Er ist nicht durch den Aufruf des cgi überschrieben worden.
Das funktioniert und, nochmal zur Erinnerung, es funktioniert in JEDEM Verzeichnis, es muß: nicht als cgi-Verzeichnis angemeldet sein.
Vielen Dank für Eure Mühen!
Euer
Andreas
Wenn ich's über die url-Zeile aufrufe, bekomme ich nur den perl-Quelltext ausgegeben. Sieht so aus, als würde ich mit SSI eine Sicherheitlücke ausnutzen, so daß ich das script aufrufen kann, obwohl es nicht in einem cgi-Verzeichnis liegt.
Nicht unbedingt.
Wenn Du das Skript über die URL-Zeile aktivierst, dann muß der Webserver aus seiner Konfiguration, ggf. aus dem Dateinamen des Skripts erraten, daß es ein CGI-Skript sein soll. Vielleicht hast Du einfach nicht eine der bei Dir erlaubten Endungen für CGI-Skripts (welche konfigurierbar sind) verwendet.
Bei SSI-EXEC ist schon durch den Kontext klar, daß es ein CGI-Aufruf sein soll - da ist der Dateiname möglicherweise egal.
wenn ich's über die url-Zeile aufrufe, bekomme ich nur den perl-Quelltext ausgegeben. Sieht so aus, als würde ich mit SSI eine Sicherheitlücke ausnutzen, so daß ich das script aufrufen kann, obwohl es nicht in einem cgi-Verzeichnis liegt.
Möglicherweise hat Dein Webmaster nicht begriffen, daß SSI und SSI-EXEC zwei paar Stiefel sind. Vielleicht darfst Du aber auch normales CGI und weißt es nur nicht.
Das funktioniert und, nochmal zur Erinnerung, es funktioniert in JEDEM Verzeichnis, es muß: nicht als cgi-Verzeichnis angemeldet sein.
Aber eben als SSI-EXEC-Verzeichnis. Wäre es nur ein SSI-Verzeichnis, dann dürftest Du nur INCLUDE und nicht auch EXEC.
Also, macht es nicht so kompliziert...
ganze einfach mit
<!--include virtual="bsp.cgi?variable=wert&variable2=wert2"-->
Stefan