Andreas Korthaus: PHP_AUTH_USER als session_id()

Beitrag lesen

Hi!

Wenn er die Anmeldeseite erfolgreich überwunden hat, ist er gegenüber dem System authentifiziert und hat eine ihm zugeordnete Session.

Wenn er sich authentifiziert dann mit _seinen_ Zugangsdaten. Somit bekommt die SessionID seinen Benutzernamen als Wert. Er _kann_ überhaupt keine andere Session übernehmen, denn die SessionID wird _nicht_ extra übertragen sondern unterdrückt, der Browser sendet doch sowieso jedesmal die HTTP-Authentification Header, wenn User und Pass gültig sind kommt der Request bis zum Script durch und dort wird entsprechend dem REMOTE_USER auf die Session mit dem REMOTE_USER als Session_ID zugegriffen. Das _kann_ er nicht fälschen, er müßte schon einen anderen Header senden. Das geht aber normalerweise nur über das HTTP-AUTH Fenster des Browsers. Hier müßte er user _UND_ pass eingeben um nicht vom Apachen abgewiesen zu werden. Auch wenn der eine manuellen Header schickt reicht das Schicken des Usernamen des Kollegen nicht aus, er braucht auch dessen Passwort, und wenn er das hat ist dessen Account mit keiner Technik der Welt mehr zu schützen. Und da die Trennung von Authentifizierung und der so davon abhängigen Session-Vergabe vielleicht doch irgendwelche Risiken birgt, würde ich die Authentifizierungs-Überprüfung vom Apachen in das PHP-Script verlagern, also würde ich am Anfang des Scriptes die PHP_AUTH_USER und PHP_AUTH_PASS prüfen, und bei Erfolg die session_id($PHP_AUTH_USER) starten.
Deine Bedenken kann ich bisher nicht verstehen. Es geht mir hier um einen Spezialfall wo sowieso per HTTP-AUTH eingeloggt wird. Auf die oben geschilderte Weise müßte das doch _sehr_ sicher sein! Verstehe nicht wo da ein Problem auftreten könnte!

Oder habe ich ein Detail übersehen?

ich hoffe :-)

Mal ein Beispiel:

<?php
  if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
  } else {
        $userarray = load_users_into_array();
        if($userarray[$_SERVER['PHP_AUTH_USER']]== $_SERVER['PHP_AUTH_PW'] && in_array($userarray,$_SERVER['PHP_AUTH_USER']){
            session_id($_SERVER['PHP_AUTH_USER']);
            session_start();
        }
  }
?>

Oder baue ich mir so eine große Sicherheitslücke ein? Ich zumindest sehe da nichts dergleichen.

Viele Grüße
Andreas