HTTP Auth mit PHP header() nutzen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von sevY, 31.10.2005.

  1. sevY

    sevY Thread Starter Gast

    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 „benutzer:passwort“ 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
     
  2. msslovi0

    msslovi0 MacUser Mitglied

    Beiträge:
    2.713
    Zustimmungen:
    115
    MacUser seit:
    20.03.2005
    Gar nicht. Microsoft hat das kaputt gemacht [tm], indem man auf die Sicherheitslücke so reagiert hat, dass man das URL-Schemata http://benutzer:passwort@domain.de einfach deaktiviert hat.

    Matt
     
    Zuletzt bearbeitet: 31.10.2005
  3. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    MacUser seit:
    15.03.2004
    Da wäre ich nicht so sicher, Du kannst das Auth-Schema ja auch im HTTP Header übergeben.

    Dazu musst Du "user:password" als Base64 encodieren, und dann für das HTTP Header filed "Authorization" setzen.

    Gruss

    Alex
     
  4. sevY

    sevY Thread Starter Gast

    Perfekt!


    Alle Infos => http://de.php.net/manual/en/features.http-auth.php
     
    Zuletzt von einem Moderator bearbeitet: 31.10.2005
  5. jodeci84

    jodeci84 MacUser Mitglied

    Beiträge:
    2
    Zustimmungen:
    0
    MacUser seit:
    05.01.2006
    Und Wie Geht Das??

    Wie kann man das machen :rolleyes: ?? - Beispiel :)

    Danke
     
  6. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    MacUser seit:
    15.03.2004
    Wo steckst Du denn fest?

    Alex
     
  7. moses_78

    moses_78 MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    das mit dem auth-header kenne ich nur so:
    PHP:
    <?php
    $user
    ="du"$pw="geheimespasswort";

    if((
    $_SERVER['PHP_AUTH_USER'] != $user) or ($_SERVER['PHP_AUTH_PW'] !=$pw)) 
    {
     
    Header("WWW-Authenticate: Basic realm=\"hier kummst net rein\"");
     
    Header("HTTP/1.0 401 Unauthorized");
     exit;

    ?>
    warum wurde der alte trööt jetzt eigentlich wieder ausgegraben?
     
  8. jodeci84

    jodeci84 MacUser Mitglied

    Beiträge:
    2
    Zustimmungen:
    0
    MacUser seit:
    05.01.2006
    Hallo,

    das was 'Yves' am Anfang gepostet hat, ist genau das was ich möchte, und zwar eine Passwortgeschutzte Seite aufrufen ohne Benutzername und Passwort einzugeben. Dieser soll im Quellcode meines Admin-Bereiches mit übergeben werden. Hierzu gab es folgenden Link wo man Benutzername und Passwort mitsenden kann [[DLMURL]http://benutzer:passwort@www.sichere-seite.de/][/DLMURL]. Das ist im Grunde schon die Lösung allerdings funzt dies im IE nicht mehr da es ein Patch von MS gab welches dies verbietet. Nun suche ich nach einer Alternative wie ich z.Bsp. über den HEADER den Benutzernamen und Passwort mitschicken kann.

    'Yves' schrieb auf deine Antwort->(Da wäre ich nicht so sicher, Du kannst das Auth-Schema ja auch im HTTP Header übergeben) hin

    Aus dem Ihnalt diese Links komme ich jedoch nicht klar.

    Und auch das was 'moses_78' jetzt geschrieben hat (Codeschnippsel) ist ja nur ne Abfrage nachdem Benutzername und Passwort übergeben wurde.
     
  9. dms

    dms Thread Starter Gast

    Also so wie ich das jetzt auf die Schnelle verstehe musst Du nur folgendes ausführen:

    header('Authorization: Basic '.base64_encode($_SERVER['PHP_AUTH_USER'].':'.$_SERVER['PHP_AUTH_PW']));

    Und danach das header('Location:....');

    Wie gesagt, habs nur überflogen, kann also ganz falsch sein.
     
Die Seite wird geladen...
Ähnliche Themen - HTTP Auth PHP
  1. alex1000
    Antworten:
    5
    Aufrufe:
    159
    pmau
    26.08.2016
  2. mad dog
    Antworten:
    19
    Aufrufe:
    2.085
    MacEnroe
    14.08.2015
  3. 404
    Antworten:
    0
    Aufrufe:
    483
  4. Akeno
    Antworten:
    5
    Aufrufe:
    1.189
    Akeno
    12.09.2014
  5. macboehni
    Antworten:
    2
    Aufrufe:
    933
    macboehni
    24.01.2014