REMOTE_USER auslesen, wenn Skript in /cgi-bin/
Ferdinand Lenhardt
- perl
0 FrankS0 Michael Schröpl0 FrankS
Hallo an alle Forum-Benutzer,
ich habe zu Testzwecken den Apache-Server installiert und teste darauf einige Perl-Skripte.
Bei einem dieser Skripte frage ich den REMOTE_USER ab. Das Skript wird über eine HTML-Seite aufgerufen, die sich in einem über .htaccess zugangsgeschützten Verzeichnis befindet. Das Perl-Skript selber befindet sich in /cgi-bin/.
Leider bleibt die oben genannte Umgebungsvariable leer.
Müsste ich zur Lösung meines Problems das Perl-Skript ebenfalls im geschützten Verzeichnis installieren und dort laufen lassen? Mit einem PHP-Skript in diesem Verzeichnis jedenfalls konnte ich den REMOTE_USER auslesen.
Wenn jetzt der Provider aber Perl-Skripte lediglich in /cgi-bin/ erlaubt, was mache ich dann?
Dankbar für eine Antwort,
Ferdinand Lenhardt
Hallo Ferdinand!
Hier findest Du einen Hinweis :http://www.teamone.de/selfaktuell/artikel/schroepl02.htm#a2.
Wenn Du REMOTE_USER im Script benötigst, dann gehts z.B. per SSI so:
Du schützt ein Verzeichnis per .htaccess, darin liegt eine Datei (auf die Du den Link setzt), die ans Script weiterleitet und REMOTE_USER ans Script übergibt.
<META http-equiv="refresh" content="0;URL=http://www.server.de/cgi-bin/script.pl?<!--#echo var="REMOTE_USER"-->">
Gruß Frank
Hallo,
wenn ich also das geschützte CGI-Script ausführen will, dann muß ich einfach
im Browser
http://www.server.de/cgi-bin/script.pl?IrgendeinUserDenEsGibt
eingeben und schon habichs?
CYa
GONZO
Hi Gonzo!
http://www.server.de/cgi-bin/script.pl?IrgendeinUserDenEsGibt
eingeben und schon habichs?
Ne, ne, so nicht.
Also etwas ausführlicher:
Um sicherzustellen, dass das Script nur von einem authorisierten Besucher ausgeführt wird, legst Du den Aufruf (!) des Scripts in eine HTML-Datei, die in einem per .htaccess geschützten Verzeichnis liegt. Im Script checkst Du dann, ob in HTTP_REFERER die URL der HTML-Seite steht. Ist das nicht der Fall, dann hat jemand das Script über einen anderen Weg aufgerufen und ist also nicht authorisiert (nachzulesen in http://www.teamone.de/selfaktuell/artikel/schroepl02.htm#a2).
Wenn Du nun im Script auch noch den Wert REMOTE_USER benötigst (der ist nämlich nicht mehr gesetzt, wenn Du das geschütze Verzeichnis verlässt), geht das mit einem Trick. Dazu brauchst Du aber SSI (<../../tgbe.htm>).
Beispiel für so eine HTML-Datei:
<HTML>
<HEAD>
<META http-equiv="expires" content="0">
<!--Mit der folgenden Zeile leitest Du sofort an Dein zu schützendes Script script.pl weiter-->
<!--Der Server ersetzt dabei <!--#echo var="REMOTE_USER"--> durch den entsprechenden Wert -->
<META http-equiv="refresh" content="0;URL=http://www.server.de/cgi-bin/script.pl?<!--#echo var="REMOTE_USER"-->">
</HEAD>
<BODY>
<!--Falls der Browser die automatische Weiterleitung nicht unterstützt, solltest Du noch-->
<!--einen anklickbaren Link anbieten-->
<A HREF="http://www.server.de/cgi-bin/script.p?<!--#echo var="REMOTE_USER"-->">Moment bitte, es geht gleich weiter zur Anmeldung.</A>
</BODY>
</HTML>
Nun kannst Du in Deinem Script $ENV{'QUERY_STRING'} auswerten, denn dort steht nun der Inhalt von REMOTE_USER drin.
Gruß Frank
Wenn jetzt der Provider aber Perl-Skripte lediglich in /cgi-bin/ erlaubt, was mache ich dann?
Die cgi-bin-Definition Deines Providers gilt für den gesamten Verzeichnisbaum, dessen Wurzel das auf cgi-bin gemappete Verzeichnis darstellt - Du darfst diesen Baum beliebig unterstrukturieren.
Also: Ein Unterverzeichnis innerhalb von cgi-bin anlegen und *darin* Dein Skript sowie eine .htaccess-Datei mit dem Schutz für Dein Skript ablegen.
Hallo Michael!
Also: Ein Unterverzeichnis innerhalb von cgi-bin anlegen und *darin* Dein Skript sowie eine .htaccess-Datei mit dem Schutz für Dein Skript ablegen.
Das klappt aber nicht bei allen Providern, denn einige ignorieren eine .htaccess im CGI-Verzeichnis (bzw. einem Unterverzeichnis) einfach. Dann bleibt nur der Weg über eine geschütztes "HTML"-Verzeichnis.
Gruß Frank