Yankee: Brauche Hilfe bei login.cgi

Hallo allezusammen ..!

ich habe mir überlegt, ein login script für den internen bereich meiner homepage zu machen. nun komm ich aber beim wichtigsten teil des scripts nicht weiter ..:

#!/usr/bin/perl

$AccessDenied = "http://www.az-clan.at/error/login/user_pass.html";
$AccessAllowed = "http://www.az-clan.at/intern/intern.html";
$ForeignCall = "http://www.az-clan.at/error/login/foreign_call.html";

#_______________________________________________________________

&Server;
&ReadParse;
$Username = $in{'user'};
$Password = $in{'pass'};
&CheckFields;
&AuthLogin;
print "Location: $AccessAllowed\n\n";
exit;

#_______________________________________________________________

sub ReadParse { local (*in) = @_ if @_;
local ($i, $key, $val); if ( $ENV{'REQUEST_METHOD'} eq "GET" )
{$in = $ENV{'QUERY_STRING'};}
elsif ($ENV{'REQUEST_METHOD'} eq "POST")
{read(STDIN,$in,$ENV{'CONTENT_LENGTH'});}
else {
$in = ( grep( !/^-/, @ARGV )) [0];
$in =~ s/\&/&/g; } @in = split(/&/,$in);
foreach $i (0 .. $#in) {
$in[$i] =~ s/+/ /g;
($key, $val) = split(/=/,$in[$i],2);
$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge;
$in{$key} .= "\0" if (defined($in{$key}));
$in{$key} .= $val; } return length($in); }

#_______________________________________________________________

Sub CheckFields {
if (!$Username || $Username eq ' ') {&Error;}
if (!$Password || $Password eq ' ') {&Error;}
}
Sub Error {
print "Location: $AccessDenied\n\n";
exit;
}

#_______________________________________________________________

Sub Server {
if ($ENV{'HTTP_REFERER'}) {
foreach $referer (@referers) {
if ($ENV{'HTTP_REFERER'} =~ /$referer/i) {
$check_referer = '1';
last;
}}}
else {$check_referer = '1';}
if ($check_referer != 1) {
print "Location: $ForeignCallr\n\n";
exit;
}}
#_______________________________________________________________
Sub AuthLogin {

so das ist das Script. Jetzt möchte ich, dass die cgi $Username und $Password in das format bringt: $Username:$Password (aaa:bbb) und dann mit den einträgen in der datei ".members" vergleicht. Wenn Username:Password mit den kombinationen aus der datei übereinstimmt kommt dann:

print "Location: $AllowedAccess\n\n"

wenn es nicht übereinstimmt dann:

print "Location: $DeniedAccess\n\n"

Das wäre mal das erste!

Als nächstes möchte ich, dass $Password in unix (?? bin mir nicht sicher wie es genau heißt ??) verwandelt wird und dann erst verglichen!

Als letztes würde ich noch gern $Username auf der internen seite verwenden: da sollte dann stehen: Willkommen $Username !! kann man das in eine normale html einbauen oder muss der letzte teil per "print" befehl generiert werden ??

Danke im voraus !
Mfg

  1. Hell-O!

    ich habe mir überlegt, ein login script für den internen bereich meiner homepage zu machen.

    Grund gütiger, dein Script ist aus der Steinzeit. Hast du das tatsächlich selber programmiert?

    #!/usr/bin/perl

    Ein Script sollte in der Entwicklungsphase immer so beginnen:

    #!/usr/bin/perl -w  
    use strict;  
    use warnings;
    

    Das strict-Pragma sorgt u.a. dafür, dass du keine Variablen in deinem Script verwendest, die du nicht deklariert hast. Das erleichtert dir die Fehlersuche ungemein. Das warnings-Pragma erleichtert dir die Suche nach Fehlern, die zwar das Script nicht sterben lassen, aber zu Problemen führen könnten (siehe hierzu auch perllexwarn).

    &Server;
    &ReadParse;

    Dieser Aufruf von Subroutinen kann gefährlich sein bzw. zu unerwünschten/unerwarteten Nebeneffekten führen, siehe hierzu perlsub.

    sub ReadParse {
    [...]

    Warum nutzt du für das Einlesen von Scriptparametern nicht das dafür gedachte Modul CGI.pm. Zu dem Thema gibt's auch was in SELFHTML: Formularverarbeitung mit dem CGI-Modul.

    Jetzt möchte ich, dass die cgi $Username und $Password in das format bringt: $Username:$Password (aaa:bbb)

    # Variante 1:  
    my $Vergleich = "$Username:$Password";  
      
    # Variante 2:  
    my $Vergleich = $Username.":".$Password;
    

    dann mit den einträgen in der datei ".members" vergleicht.

    Siehe hierzu: Funktionen für Ein-/Ausgabe und Lesen/Schreiben von Daten und Vergleichsoperatoren.

    Wenn Username:Password mit den kombinationen aus der datei übereinstimmt kommt dann:

    Bedingte Anweisungen mit if, else und elsif.

    Als nächstes möchte ich, dass $Password in unix (?? bin mir nicht sicher wie es genau heißt ??) verwandelt wird und dann erst verglichen!

    Ähm, wozu das? Meinst du vielleicht die Funktion crypt?

    Als letztes würde ich noch gern $Username auf der internen seite verwenden: da sollte dann stehen: Willkommen $Username

    Dann merke dir, wer angemeldet ist und gib es weiter. Entweder als Parameter von Seite zu Seite oder in einer Session.

    Siechfred

    --
    Hier könnte Ihre Werbung stehen.
    Dark Millennium || Die neue 1%-Regelung