franz.: Wer kennt die entsprechende Syntax??

Hallo,

ich hab das Problem, ein admin-script per passwort zu schützen.
Meine Idee ist, das das admin-script nur über eine Seite aufrufbar ist, deren Verzeichnis ich per .htaccess mit passwort belege. (Leider darf ich in meinem cgi-bin keine Unterverzeichnisse erstellen).
Das Script soll aber auch nicht durch direkten Aufruf des Scriptes aufrufbar sein, d.h. alle, die nicht über den Link zum Script gelangen, sollen abgewiesen werden.

Hier der Beginn des Scriptes:

#!/usr/bin/perl

###########################################################################
@referers = ('www.name.de');

Done

##############################################################################

Check Referring URL

&check_url;

###########################################################################

Subroutines

###########################################################################

sub check_url {

# Localize the check_referer flag which determines if user is valid.     #
    local($check_referer) = 0;

# If a referring URL was specified, for each valid referer, make sure    #
    # that a valid referring URL was passed to bsp..                     #

if ($ENV{'HTTP_REFERER'}) {
        foreach $referer (@referers) {
            if ($ENV{'HTTP_REFERER'} =~ mhttps?://([^/]*)$refereri) {
                $check_referer = 1;
                last;
            }
        }
    }
    else {
        $check_referer = 1;
    }

# If the HTTP_REFERER was invalid, send back an error.                   #
    if ($check_referer != 1) { &error('bad_referer') }
}

sub error {
    # Localize variables and assign subroutine input.                        #
    local($error) = @_;
    local($host);

if ($error eq 'bad_referer') {
        if ($ENV{'HTTP_REFERER'} =~ m^https?://([\w.]+)i) {
            $host = $1;
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
<head>
  <title>Bad Referrer - Access Denied</title>
</head>
<body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Bad Referrer - Access Denied</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The form attempting to use
     <a href="http://www.bsp.de">bsp.</a>
     resides at <tt>$ENV{'HTTP_REFERER'}</tt>, which is not allowed to access
     this cgi script.<p>

If you are attempting to configure bsp. to run with this form, you need
     to add the following to @referers, explained in detail in the README file.<p>

Add <tt>'$host'</tt> to your <tt><b>@referers</b></tt> array.<hr size=1>
     <center><font size=-1>
      <a href="http://www.bsp.de">bsp.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
</body>
</html>
(END ERROR HTML)
        }
        else {
            print <<"(END ERROR HTML)";
Content-type: text/html
(END ERROR HTML)
        }
    }
    exit;
}
################# Ab hier beginnt das admin-script! #####################

Measure CPU time usage;

$start = (times)[0];

require 'script.cfg';

Done

###########################################################################

usw.........usw.....usw...

Frage: Wie bringe ich dem Script bei, daß solange der Aufruf des entsprechenden Scriptes nicht über die admin.html meines Servers geschieht, die Bad-access-Meldung kommt und, sobald der Aufruf über die admin.html geschieht, dieser Punkt im Script als abgehandelt gilt und nicht mehr durchgecheckt wird.

Leider bin ich als "Perl-Laie" zu betrachten, daher brauche ich die entsprechende Syntax dazu.

Danke im Voraus für Eure eventuelle Hilfe.

P.S. Falls einer ‚ne bessere Idee hat das script zu schützen, ist dessen Hilfe natürlich auch willkommen.

Grüße

Hans.

  1. Frage: Wie bringe ich dem Script bei, daß solange der Aufruf des entsprechenden Scriptes nicht über die admin.html meines Servers geschieht, die Bad-access-Meldung kommt...

    Ist nur so eine Idee, aber wie wäre es, wenn du den letzten Eintrag in der History dynamisch an deinen Script übergibst, und wenn er nicht gleich http://tamdidam/admin.html ist die bad access Meldung rausgibst?

    Also in der HTML Form muss <input type=hidden name=historychek value="history.last"> oder sowas stehen, klick dich da mal durch selfhtml. Das kannst du dann im Script abfangen,

    Gruß
    Cruz

  2. Hi Hans,

    auch wenn Du schon viel Arbeit in die Sache gesteckt hast .. schau mal auf:
    http://cgi.resourceindex.com/
    dort gibt es ettliche Scripte, die sich mit Deiner Aufgabenbestellung beschäftigen.

  3. Hi!

    ich hab das Problem, ein admin-script per passwort zu schützen.
    Meine Idee ist, das das admin-script nur über eine Seite aufrufbar ist, deren Verzeichnis ich per .htaccess mit passwort belege. (Leider darf ich in meinem cgi-bin keine Unterverzeichnisse erstellen).

    »»  Das Script soll aber auch nicht durch direkten Aufruf des Scriptes aufrufbar sein, d.h. alle, die nicht über den Link zum Script gelangen, sollen abgewiesen werden.

    Diese Methode ist etwas unsicher. Es könnte zum beispiel jemand den Referer fälschen, und schon ist er in dem Adminbereich (Wenn er die URL kennt). Du solltest (wäre etwas sicherer) lieber etwas in der Art von folgendem machen:

    #!/usr/bin/perl

    use CGI qw(:standard);

    $username = param("username");
    $password = param("password");

    if ($username eq "benutzername" && $password eq "passwort") {

    Admincode

    } else {

    Bad login code

    }

    Und dann mit einem HTML-Form mit den inputs username und password dorthinzeigen...

    Ich hoffe das hilft.

    CU
    ArneB