Frage

Wie einzigartig ist die PHP-Session-ID? Ich habe den Eindruck von verschiedenen Dingen, die ich gelesen habe, dass ich nicht auf zwei Benutzer nie die gleiche sessionid immer verlassen soll. Ist es nicht eine GUID?

War es hilfreich?

Lösung

Sitzungs_ID kann zwar dupliziert werden, aber die Wahrscheinlichkeit ist sehr gering. Wenn Sie eine Website mit einem fairen Verkehr haben, kann es geschieht einmal in Ihrer Website Leben Web und wird nur einen Benutzer für eine Sitzung stören.

Das ist es nicht wert zu kümmern, wenn Sie erwarten eine sehr hohe Traffic-Website oder einen Dienst für die Bank Industrie zu bauen.

Andere Tipps

Es ist nicht sehr einzigartig wie ausgeliefert. In der Standardkonfiguration ist es das Ergebnis eines Hash von verschiedenen Dingen einschließlich des Ergebnisses der gettimeofday (die nicht sehr eindeutig ist), aber wenn Sie besorgt sind, sollten Sie es so konfigurieren, eine Entropie von / dev / urandom zu zeichnen, wie so

ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");

Suche nach "php_session_create_id" in den Code für den eigentlichen Algorithmus sie verwenden.

Edited hinzufügen: Es gibt einen DFA Zufallszahlengenerator durch die pid ausgesät, mit der Zeit in usecs gemischt. Es ist nicht ein fester Einzigartigkeit Zustand vor allem aus Sicht der Sicherheit . Verwenden Sie die Entropie Config oben.

Update:

  

Ab PHP 5.4.0 session.entropy_file standardmäßig auf / dev / urandom oder   / Dev / arandom, wenn es verfügbar ist. In PHP 5.3.0 wurde diese Richtlinie links   standardmäßig leer. PHP Manual

Wenn Sie wissen wollen, wie PHP erzeugt eine Session-ID standardmäßig auf den Quellcode überprüfen Github . Es ist sicherlich nicht zufällig und basiert auf einem Hash (Standard: md5) diese Bestandteile (siehe Linie 310 von Codeausschnitt):

  1. IP-Adresse des Kunden
  2. Aktuelle Zeit
  3. PHP Linear Kongruenzgenerator - ein Pseudozufallszahlengenerator (PRNG)
  4. OS-spezifische Zufallsquelle - wenn das Betriebssystem hat eine zufällige Quelle zur Verfügung (z / dev / urandom)

Wenn das Betriebssystem eine Zufallsquelle zur Verfügung hat, dann Stärke der erzeugten ID zum Zweck eine Session-ID des Seins hoch ist ( / dev / urandom und andere OS Zufallsquellen sind (in der Regel) kryptografisch sichere PRNGs ). Wenn aber tut es nicht, dann ist es zufrieden stellend.

Das Ziel mit Sitzungs-Identifikations Generation ist:

  1. minimiert die Wahrscheinlichkeit der Erzeugung von zwei Session-IDs mit dem gleichen Wert
  2. es sehr schwierig rechnerisch macht zufällige Schlüssel zu generieren und traf eine in Gebrauch ein .

Dies wird durch PHP Ansatz zur Sitzung Generation erreicht.

Sie können nicht absolut garantieren Einzigartigkeit , aber die Wahrscheinlichkeiten sind so niedrig, den gleichen Hash des Schlagens doppelt so hoch ist, allgemein gesprochen, nicht die Mühe wert.

Sie können eine alternative Hash-Erzeugungsfunktion installieren, wenn Sie die Art und Weise der ID anpassen möchten erzeugt wird (es ist eine 128-Bit-Zahl über MD5 standardmäßig generiert). Siehe http://www.php.net/ manual / en / session.configuration.php # ini.session.hash-Funktion

Weitere Informationen über die PHP-Sessions, versuchen, diesen ausgezeichneten Artikel http://shiflett.org / articles / die-Wahrheit-über-Sitzungen , die zu anderen Artikeln über Session-Fixation auch Links und kapern.

Größe von Sitzungs_ID
Es sei angenommen, daß seesion_id gleichmäßig verteilt ist, und hat eine Größe = 128 Bit. Es sei angenommen, dass jeder Mensch auf dem Planeten mit einer persistenten einer neuen Sitzung seit 1000 Jahren einmal täglich einloggt.

num_sesion_ids  = 1000*365.25 *7*10**9 < 2**36
collission_prob < 1 - (1-1/2**82)**(2**36)  ≈ 1 - e**-(1/2**46) 
                ≈ 1/2**46 

So ist die Wahrscheinlichkeit von einer oder mehrere Kollision kleiner als eins in 70 Tausend Milliarden. Daraus ergibt sich die eine 128-Bit-Größe des Sitzungs_ID sollte groß genug sein. Wie in anderen Kommentaren erwähnt, könnte der SESSION_MANAGER auch prüfen, ob neue Sitzungs_ID nicht existiert bereits.

Zufälligkeit
Deshalb ist die große Frage, die ich denke, ist, ob die session_id: s mit guter Pseudo-Zufälligkeit erzeugt werden. An diesen kann man nie sicher sein, aber ich würde empfehlen, eine bekannte und häufig verwendete Standardlösung für diesen Zweck verwenden (wie Sie wahrscheinlich schon tun).

Auch wenn Kollisionen aufgrund Überprüfung vermieden werden, Zufälligkeit und Größe der Sitzungs_ID wichtig ist, so dass Hacker nicht, irgendwie qualifiziert tut erraten und aktive Sitzungs_ID finden: s. Mit großer Wahrscheinlichkeit

Ich habe keine Bestätigung auf das, aber ich glaube, dass PHP prüft, ob eine Session-ID bereits vorhanden ist, bevor die Schaffung eines mit dieser ID.

gefunden

Die Session-Hijacking Ausgabe Menschen sind besorgt über ist, wenn jemand die Session-ID eines aktiven Benutzer herausfindet. Dies kann auf vielfältige Weise verhindert werden, für weitere Informationen auf, die Sie sehen können Diese Seite auf php.net und dieses Papier auf Session-Fixation

Nein, Session-ID ist kein GUID, aber zwei Benutzer sollen nicht die gleiche Session-ID erhalten, wie sie auf der Serverseite gespeichert werden.

<?php
session_start();
$_SESSION['username']="username";
?>

<!DOCTYPE html>
<html>
<head>
    <title>Update</title>
</head>
<body>

<table border="2">
    <tr>
        <th>Username</th>
        <th>Email</th>
        <th>Edit</th>
    </tr>
<?php
     $conn=mysqli_connect("localhost","root","","telephasic");
     $q2="select * from register where username = '".$_SESSION['username']."'";
     $run=mysqli_query($conn, $q2);
     while($row=mysqli_fetch_array($run))
     {
         $name=$row[1];
         $email=$row[2];
     ?>

    <tr>
        <td><?php echo $name; ?></td>
        <td><?php echo $email; ?></td>
        <td><a href="edit.php"> Edit </a></td>
    </tr>
 <?php } ?>
 </table> 
 </body>

, wenn Ihr Benutzername anders oder einzigartig ist, können Sie diesen Code für Sitzung verwenden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top