Marcel: Session ID

Mon SelfHTMLer,
hab mal ne Frage, auf meiner HP soll n kleiner private bereich entstehen also hab ich mir n login gebastelt, wenn pw korrekt und name in datenbank->leite weiter auf privat.
login.php:
if($row[2]==$_POST['passwort'])
{
 session_start();
 $_SESSION['angemeldet']=true;
 header("location: user_online.php?".SID."&name=".$_POST['name']);
 }

privat.php
session_start();
if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet'])
  {
              header('Location: ../fehler.php?fehler=4');
              exit;
         }
else mach halt das was du sollst

Funktioniert auch.... fast nur noch ein manko wobei ich net weiß obs eins ist. Beim ersten Login steht in der titelzeile die SessionID, wenn ich nun diese titelzeile kopiere neues Browserfenster aufmache und einfüge, kommm ich auch auf die seite... kann ich das irgendwie verhindern? Komischer weise logge ich mich neu ein... steht sie da nicht mehr...<- bitte nicht schreien ANFÄNGER!!

MFG Marcel

  1. Hi,

    kann ich das irgendwie verhindern?

    nein. Willkommen in der wunderbaren Welt von HTTP.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      kann ich das irgendwie verhindern?

      nein. Willkommen in der wunderbaren Welt von HTTP.

      und warum steht die SID nur beim ersten login da???

      MFG Marcel

  2. Hallo,

    header("location: user_online.php?".SID."&name=".$_POST['name']);

    durch SID gibst Du die Session ID aus. Also ist es nur natürlich, daß sie auch zu sehen ist. Allerdings muß ich monieren, daß Du Dich nicht an den Standard hälst. Der Header Location nat immer einen URI _mit_ Protokoll, Domain und Pfad als Angabe.

    header('Location: ../fehler.php?fehler=4');

    Das gleich gilt hier also auch.

    kann ich das irgendwie verhindern?

    Du könntest zumindes die Sichtbarkeit in der Adresszeile verhindern, indem Du Sessions nur über Cookies speicherst.

    Gruß aus Berlin!
    eddi

    1. Hallo eddi,

      Du könntest zumindes die Sichtbarkeit in der Adresszeile verhindern, indem Du Sessions nur über Cookies speicherst.

      das wäre in der Tat eine Alternative, falls der Besucher Cookies akzeptiert. Allerdings hindert das einen Besucher auch nicht daran, nach dem Schließen des Browserfensters (ohne so etwas wie ein Logout) einige Minuten später ein neues Browserfenster aufzumachen und den privaten Bereich ohne Login direkt zu betreten - das Cookie existiert ja noch. Ich vermute, das ist es, was Marcel nicht gefällt (wobei man das mit Session Cookies, also nicht-permanenten, weitgehend ausschließen kann).

      Ciao,
       Martin

      --
      Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.
      1. Hallo,

        Du könntest zumindes die Sichtbarkeit in der Adresszeile verhindern,

        ^^^^^^^^^^^^^^^^^^^^^^^^^

        das wäre in der Tat eine Alternative, falls der Besucher Cookies akzeptiert. Allerdings hindert das einen Besucher auch nicht daran, nach dem Schließen des Browserfensters (ohne so etwas wie ein Logout) einige Minuten später ein neues Browserfenster aufzumachen und den privaten Bereich ohne Login direkt zu betreten - das Cookie existiert ja noch. Ich vermute, das ist es, was Marcel nicht gefällt (wobei man das mit Session Cookies, also nicht-permanenten, weitgehend ausschließen kann).

        ich entschludige mich hiermit ausdrücklich, daß ich mich gegenüber Deiner ausführlichen Ausführung, dennoch selbes aussagend in Kürze vergangen habe.

        Gruß aus Berlin!
        eddi

      2. hi,

        Allerdings hindert das einen Besucher auch nicht daran, nach dem Schließen des Browserfensters (ohne so etwas wie ein Logout) einige Minuten später ein neues Browserfenster aufzumachen und den privaten Bereich ohne Login direkt zu betreten - das Cookie existiert ja noch. Ich vermute, das ist es, was Marcel nicht gefällt (wobei man das mit Session Cookies, also nicht-permanenten, weitgehend ausschließen kann).

        Und solche Sitzungs-Cookies setzt PHP bei einer cookiebasierten SID-Übergabe per Default.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Moin!

          Und solche Sitzungs-Cookies setzt PHP bei einer cookiebasierten SID-Übergabe per Default.

          Danke, das wusste ich nicht (hab ich noch nie verwendet).
          Wieder was gelernt - das ist eines der Dinge, die ich in diesem Forum liebe!

          Schönen Tag noch,
           Martin

          --
          Der Gast geht solange zum Tresen, bis er bricht.
    2. Hallo Eddi,

      Du könntest zumindes die Sichtbarkeit in der Adresszeile verhindern, indem Du Sessions nur über Cookies speicherst.

      über setcookie und dann  nur so:
      header("location: user_online.php?name=".$_POST['name']);
      oder wie meinst du das???

      MFG Marcel

      1. Hallo,

        header("Location: http://broch.domain.blablabla.de/user_online.php?name=".$_POST['name']);

        oder wie meinst du das???

        genau, und im Übrigen reicht mir ein Fragezeichen ;)

        Gruß aus Berlin!
        eddi

  3. Moin!

    Funktioniert auch.... fast nur noch ein manko wobei ich net weiß obs eins ist. Beim ersten Login steht in der titelzeile die SessionID, wenn ich nun diese titelzeile kopiere neues Browserfenster aufmache und einfüge, kommm ich auch auf die seite... kann ich das irgendwie verhindern? Komischer weise logge ich mich neu ein... steht sie da nicht mehr...<- bitte nicht schreien ANFÄNGER!!

    Zuerst mal grundsätzlich was zum Thema "Einloggen": Man kann sich im HTTP-Protokoll nicht "einloggen", wie es bei FTP, Telnet oder SSH möglich ist, weil ein Einloggen eine dauerhaft bestehende Verbindung voraussetzen würde - und das Beenden dieser Verbindung (aus welchen Gründen auch immer) ein Logout bedeutet.

    Da HTTP aber für jede Anforderung einer Ressource eine neue Verbindung aufbaut, ist es zwingend erforderlich, dass bei zugriffsgeschützten Ressourcen der Browser jedesmal Authentifizierungsdaten mitschickt.

    Das kann entweder eine Session-ID sein, die zuvor schon mit Username und einem Passwort verbunden wurde, oder Username und Passwort direkt (wie bei der HTTP-Authentifizierung, bekannt als ".htaccess" - obwohl diese Bezeichnung sachlich inkorrekt ist).

    Benutzt man Sessions, muß man jeglichen Zugriff auf die Ressourcen selbst prüfen - benutzt man HTTP-Authentifizierung, übernimmt das der Webserver für einen.

    Jetzt zu den Session-IDs und deren Übermittlung: PHP sieht dafür zwei grundsätzliche Metoden vor: Primär wird ein Cookie benutzt - und wenn das nicht geht, wird die Session-ID als Parameter an die URL angehängt bzw. als Hidden-Feld in jedes Formular integriert.

    Beim allerersten Seitenaufruf einer Seite, die session_start() benutzt, weiß PHP aber noch nicht, ob Cookies zurückgesendet werden - das kann man erst beim ZWEITEN Seitenaufruf feststellen, weil erst dann das erfolgreich gesetzte Cookie zum ersten Mal vom Browser zurückgesendet wird. Wenn PHP aber kein Cookie empfängt (beim ersten Seitenaufruf, oder auch bei jedem folgenden ohne Cookie), wird bei entsprechender Konfiguration immer automatisch an jede URL die Session-ID angehängt und in Formulare integriert, damit die Session-ID auch bei Besuchern, die Cookies ablehnen, nicht verloren geht.

    Wenn du die Session-ID kopierst und in einem zweiten Fenster aufrufst, kannst du logischerweise zugreifen, weil du dich vorher mit dieser Session-ID eingeloggt hast. Bei allen deinen Methoden zur Zugriffskontrolle darfst du niemals davon ausgehen, dass alleine die reine Existenz einer Session-ID schon irgendetwas aussagt. Session-IDs kann man sich beliebig selbst generieren, und PHP arbeitet auch mit vom üblichen Schema abweichenden IDs problemlos. "PHPSESSID=hallo" funktioniert.

    Sessions sind deshalb recht sicher gegen Übernahme, weil der Zahlenbereich (jede Session-ID ist normalerweise eine 128-Bit-Zahl in Hex-Darstellung) so riesig ist, dass man nicht erfolgreich in annehmbarer Zeit alle IDs ausprobieren kann - aber im Prinzip reicht es aus, genau DEINE aktuelle Session-ID anzugeben, sobald du dich eingeloggt hast, und man hätte Zugriff auf deinen internen Bereich.

    Das ist aber auch der Fall, wenn man statt deiner aktuell verwendeten Session-ID (die schwierig zu raten ist) dein Passwort und Username angibt (was hoffentlich auch schwer zu raten ist). Wobei es dann vollkommen egal ist, ob du Username und Passwort über ein Formular sendest, oder HTTP-Authentifizierung benutzt - vom Sicherheitslevel her werden beide Informationen unverschlüsselt übertragen und sind deshalb für Hochsicherheitsanwendungen nicht geeignet - man müßte SSL benutzen, um mehr Sicherheit zu erreichen.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
  4. Dickes Dankeschön habt mir sehr geholfen und verstanden hab ichs jetz glaub ich auch....

    MFG und drei Ausrufezeichen Marcel!!!*GG*