Ferdinand Lenhardt: REMOTE_USER auslesen, wenn Skript in /cgi-bin/

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

  1. 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

    1. 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

      1. 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

  2. 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.

    1. 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