n.d. parker: CGI-Skriptaufruf durch Direkteingabe verhindern

Beitrag lesen

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');

erzeugt als erste Zeile (nach der Shebang) im Script einen Error 500, wenn das Script mit einen anderen Methode als POST aufgerufen wurde.

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.