CGI-Skriptaufruf durch Direkteingabe verhindern
Jörg
- cgi
0 Frank Schönmann0 Jörg
0 n.d. parker
Hallo!
Ich habe oft gesehen, dass CGI(Perl)-Skripte nur durch verlinkte Seiten ausgeführt werden. Wenn ich zum Beispiel "http://www.seite.de/cgi-bin/skript.pl" eingebe kommt ein Server-Error.
Genau das ist das was ich möchte (Meine Skripte werden bei Direkeingabe ausgeführt). Mein Webhosting-Service sagte mir ich solle die mit HTTP_REFERER erledigen. Da HTTP_REFERER bei Frames (Netscape) bzw. bei Opera teilweise überhaupt nicht definiert ist suche ich nach einer anderen Lösung. (Ich programmiere mir Perl.)
Kann ich vielleicht serverseitig Einstellungen vornehmen, die mein Vorhaben in die Tat umsetzen? (--> Webshell???)
Hat jemand Ideen und Vorschläge für mich? - momentan ist meine Seite dadurch wenig professionell.
DANKE!
Schöne Grüsse,
Jörg
hi!
Hat jemand Ideen und Vorschläge für mich? - momentan ist meine
Seite dadurch wenig professionell.
HTTP_REFERRER ist quatsch, weil viele Leute den auch rausfiltern oder
er nicht richtig funktioniert. Wenn dein Skript nur auf Formular-
Eingaben reagiert, kannst du es ja zb. auf POST umstellen. Wenn das
Skript dann keine Parameter erhält, zeigt es eine Fehlermeldung an.
Wenn dein Skript zb. über einen Link aufgerufen wird und du deshalb
unbedingt auch GET-Parameter brauchst, kannst wieder verlangen, dass
das Skript auf jeden Fall Parameter erhält und darauf hoffen, dass
deinen Besuchern zufällig den Skriptnamen aufgerufen haben oder es
ihnen zu aufwendig ist, selbst die Parameter anzugeben. Oder du
könntest die Ursprungsseite(n) auch dynamisch gestalten und allen
Usern eine Session-ID verpassen. Falls die übergebene Session-ID
ungültig ist, kommt dann eine Fehlermeldung.
Die genaue Lösung für dein Problem kommt also ganz auf die Situation
an. Wenn dir obiges nicht genügt, kannst du die ja nochmal etwas
genauer beschreiben... :)
bye, Frank!
Hallo!
Vielen Dank ihr beiden!!!
Die genaue Lösung für dein Problem kommt also ganz auf die Situation
an. Wenn dir obiges nicht genügt, kannst du die ja nochmal etwas
genauer beschreiben... :)
Zum Teil werden die Parameter per link übergeben
(http://www.seite.de/cgi-bin/skipt.pl?wert=123")
ansonsten per Formulare ausgewertet.
Find ich arg, dass man mir erzählt mein Problem mit HTTP_REFERER zu lösen...!
Wenn dein Skript zb. über einen Link aufgerufen wird und du deshalb
unbedingt auch GET-Parameter brauchst, kannst wieder verlangen, dass
das Skript auf jeden Fall Parameter erhält und darauf hoffen, dass
deinen Besuchern zufällig den Skriptnamen aufgerufen haben oder es
ihnen zu aufwendig ist, selbst die Parameter anzugeben.
Diese Lösung ist mir klar - verstehe ich.
Oder du
könntest die Ursprungsseite(n) auch dynamisch gestalten und allen
Usern eine Session-ID verpassen. Falls die übergebene Session-ID
ungültig ist, kommt dann eine Fehlermeldung.
Ich habe auf meiner Eingangsseite eine ID-Vergabe. Diese Nummer nimmt jeder User auf seinem Weg durch meine Webseite mit und wird daran erkannt. Meinst du so etwas oder ist Session-ID etwas anderes. Im Perl-Kochbuch habe ich leider nichts dazu gefunden...
Danke nochmal...!!!
Schöne Grüsse,
Jörg
Moin,
Ich habe oft gesehen, dass CGI(Perl)-Skripte nur durch verlinkte Seiten ausgeführt werden. Wenn ich zum Beispiel "http://www.seite.de/cgi-bin/skript.pl" eingebe kommt ein Server-Error.
Server Error = 500?
In dem Fall sind die Scripte schlecht. Sie sollten wenigstens eine anstaendige Fehlermeldung o.ae. ausgeben.
Genau das ist das was ich möchte (Meine Skripte werden bei Direkeingabe ausgeführt).
kommt auf die Scripte an. Du kannst serverseitig (bei einem guten Server) die Request-Methode einschraenken und beispielsweise GET nicht zulassen (nur POST).
Wenn das an deinem Server nicht geht, kannst du an den Anfang des Scripts etwa folgendes schreiben:
die "method not allowed" unless ($ENV{REQUEST_METHOD} eq 'POST');
etwas eleganter:
#!/usr/bin/perl -w
use strict;
use CGI qw(header);
unless ($ENV{REQUEST_METHOD} eq 'POST')
print header(-status => '405 Method not allowed');
print <<EOH;
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>405 Method not allowed</TITLE>
</HEAD><BODY>
<H1>Method not allowed</H1>
The Request Method '$ENV{REQUEST_METHOD}' is not allowed for the requested URI.<P>
</BODY></HTML>
EOT
__END__
Alternativ kannst du auch Error 400 nehmen (Bad Request).
Das verhindert allerdings nicht, dass jemand, mit einem geeigneten Tool das Script auch per POST aufruft.
Mein Webhosting-Service sagte mir ich solle die mit HTTP_REFERER erledigen. [...]
Verlange dein Geld zurueck. Das ist Schwachsinn. Der Referrer ist wirklich ungeeignet.
Kann ich vielleicht serverseitig Einstellungen vornehmen, die mein Vorhaben in die Tat umsetzen? (--> Webshell???)
s.o.
was ist eine Webshell?
Hat jemand Ideen und Vorschläge für mich? - momentan ist meine Seite dadurch wenig professionell.
Wieso wenig professionell? Das verstehe ich nicht.
Viele Gruesse,
n.d.p.