Hi,
#!/usr/bin/perl
#!/usr/bin/perl -w
use strict;
if (!($ENV{'QUERY_STRING'})) {&login;}
[...]
perldoc CGI
print "Location:http://$moreinfo{'username'}:$moreinfo{'passwort'}@www.meinedomain.de/$moreinfo{'username'}\n\n";
Das ist
_ _ _
__ _____ _ __| |__ ___ | |_ ___ _ __ | |
\ \ / / _ \ '__| '_ \ / _ | __/ _ \ '_ | |
\ V / __/ | | |_) | (_) | || __/ | | |_|
\/ \__|_| |_.__/ \__/ \_\___|_| |_(_)
Siehe RFC 1738, http://www.ietf.org/rfc/rfc1738.txt:
"No user name or password is allowed."
Das ganze geht mit Netscape wunderbar.
Ausnamsweise ist es mal Netscape, der die Protokolle vergewaltigt und so für schadenerzeugende Dinge wie Dein Script sorgt. Netscape setzt obige... nun, eine URL ist es nicht... in etwas gültiges um und fügt RFC 2617 konforme Header hinzu. Bei allen anderen Browsern wird das defekte Ding da ungeschützt durch's Netz gejagt! Wer weiß, wie viele Systeme dadurch schon abgestürzt sind.
Der IE legt übrigens das gleiche krasse Fehlverhalten an den Tag, wenn Du so ein Ding als Link in ein HTML-Dokument packst. Ob andere Browser jenes Konglumerat akzeptieren und ins Netz pusten, den Link nicht anzeigen oder sogar den kompletten Seitenaufbau ablehnen, will ich gar nicht wissen. Ehrlich gesagt schaudert mir insbesondere bei der erstgenannten Variante.
Wer weis warum?
Wer Standards mit Füßen tritt, darf sich über "ungewöhnliches" Verhalten nicht wundern. Du wußtest wahrscheinlich nicht, daß Benutzername und Passwort in HTTP-URLs explizit untersagt sind - aber jetzt ist es Dir bekannt.
Viel wichtiger - wer weis wie ich das Script auch mit dem IE zum Laufen kriege?
Die HTTP-Authentifizierung zwischen Browser und Server kannst Du nicht auf nur einer Seite vornehmen. Der Browser muß wissen, wie er sich bei Folgeseiten authentifizieren muß - und die üblichen Mechanismen erfordern dazu die explizite Benutzereingabe. Das ist aber nicht lästig, sondern sinnvoll.
Cheatah