S
sevY
Hi zusammen,
es geht um HTTP Auth (kennt jeder – die Browsereingabeaufforderung mit Benutzernamen, Passwort – „umgangssprachlich“ fälschlichweise auch als .htaccess Schutz bezeichnet wird).
Man kann sich über HTTP Auth auch authentifizieren, indem man den Benutzernamen mit einem Doppelpunkt vom Passwort trennt und dieses mit einem @ der URL voranstellt.
Beispiel:
http://benutzer:passwort@www.sichere-seite.de/
Nun habe ich ein Tool gebastelt, mit dem man verschiedenen Benutzer- und Gruppenzugriffsrechte erstellen und auf verschiedene Verzeichnisse legen kann (.htaccess und .htpasswd Dateien werden dezentralisiert in die Verzeichnisse gelegt).
Aufgrund diverser Umstände (Performancegründe, da sehr viele Zugriffe - kein PHP für bestimmte Verzeichnisse gewünscht) blieb HTTP Auth als einzige Möglichkeit zur Authentifizierung übrig.
Und nun ein ganz banales Problem… der IE6 unter Windows scheint sich an dem URL-String mit „benutzerasswort“ zu stören, sofern man diesen über PHP mit header() übergibt.
Safari und Firefox (auch unter Windows) verarbeiten das wunderbar – der IE6 quittiert das mit einem 404.
Warum die Übergabe mit header()? Ganz einfach… es gibt 6 Loginbereiche - aber es soll nur eine zentrale Loginseite mit schickem Loginformular geben…
Hier das Script, an das die Formulardaten via POST gesendet werden…
Lange Rede – kurzer Sinn: Wie übergibt man einen Benutzernamen und ein Passwort für HTTP Auth per Script so, das es alle Browser verstehen?
Viele Grüße
Yves
es geht um HTTP Auth (kennt jeder – die Browsereingabeaufforderung mit Benutzernamen, Passwort – „umgangssprachlich“ fälschlichweise auch als .htaccess Schutz bezeichnet wird).
Man kann sich über HTTP Auth auch authentifizieren, indem man den Benutzernamen mit einem Doppelpunkt vom Passwort trennt und dieses mit einem @ der URL voranstellt.
Beispiel:
http://benutzer:passwort@www.sichere-seite.de/
Nun habe ich ein Tool gebastelt, mit dem man verschiedenen Benutzer- und Gruppenzugriffsrechte erstellen und auf verschiedene Verzeichnisse legen kann (.htaccess und .htpasswd Dateien werden dezentralisiert in die Verzeichnisse gelegt).
Aufgrund diverser Umstände (Performancegründe, da sehr viele Zugriffe - kein PHP für bestimmte Verzeichnisse gewünscht) blieb HTTP Auth als einzige Möglichkeit zur Authentifizierung übrig.
Und nun ein ganz banales Problem… der IE6 unter Windows scheint sich an dem URL-String mit „benutzerasswort“ zu stören, sofern man diesen über PHP mit header() übergibt.
Safari und Firefox (auch unter Windows) verarbeiten das wunderbar – der IE6 quittiert das mit einem 404.
Warum die Übergabe mit header()? Ganz einfach… es gibt 6 Loginbereiche - aber es soll nur eine zentrale Loginseite mit schickem Loginformular geben…
Hier das Script, an das die Formulardaten via POST gesendet werden…
PHP:
$query=mysql_query("select realm from ".DB_TAB." where username='".mysql_escape_string($_POST['username'])."' order by username asc",$handler);
if(mysql_num_rows($query)>0) {
$result=mysql_fetch_array($query);
switch($result['realm']) {
case MEMBER_DE:
$target=''.mysql_escape_string($_POST['username']).':'.mysql_escape_string($_POST['password']).'@www.domain.com/member/';
break;
case MEMBER_EN:
$target=''.mysql_escape_string($_POST['username']).':'.mysql_escape_string($_POST['password']).'@www. domain.com/en/member/';
break;
case PRESS_DE:
$target=''.mysql_escape_string($_POST['username']).':'.mysql_escape_string($_POST['password']).'@www. domain.com/press/';
break;
case PRESS_EN:
$target=''.mysql_escape_string($_POST['username']).':'.mysql_escape_string($_POST['password']).'@www. domain.com/en/press/';
break;
}
header("Location: http://".$target."");
} else {
header("Location: http://www.domain.com/04_login.php?error=".mysql_escape_string($_POST['username'])."");
}
?>
Lange Rede – kurzer Sinn: Wie übergibt man einen Benutzernamen und ein Passwort für HTTP Auth per Script so, das es alle Browser verstehen?
Viele Grüße
Yves