Codeigniter / PHP Sitzungen Sicherheitsfrage

8

Ich entwickle eine Webanwendung mit Codeigniter. Wenn sich ein Benutzer bei meiner Website authentifiziert, speichere ich derzeit dessen Benutzerkennung in meinem Sitzungscookie (für die ich die Verschlüsselung aktiviert habe). Einige meiner Modellklassen verwenden den Wert im Parameter 'user-identifier' der Sitzung / des Cookies, um Änderungen an Eigenschaften von Benutzerkonten vorzunehmen.

Meine Sorge ist, dass ich mich frage, ob es möglich ist, dass jemand ein gültiges codeigniter-Session-Cookie mit einer von mir festgelegten Benutzerkennung nimmt, den Wert der Benutzerkennung auf den Wert eines anderen Benutzers ändert und Nehmen Sie Änderungen an einem anderen Benutzerkonto vor. Würden codeigniter / php-Sitzungen einen Fehler erzeugen, wenn jemand versucht, eine Eigenschaft eines Session-Cookies zu ändern?

    
Casey Flynn 11.06.2011, 16:40
quelle

3 Antworten

19

Öffnen Sie Ihre /application/config/config.php, suchen Sie nach "sess_use_database" und ändern Sie sie in "TRUE", falls Sie dies noch nicht getan haben. Auf diese Weise werden alle Sitzungsvariablen in einer Datenbanktabelle gespeichert und Sitzungscookies enthalten nur die Sitzungs-ID-Zeichenfolge.

Für zusätzliche Sicherheit können Sie auch "sess_match_ip" auf TRUE setzen. Auf diese Weise wird die Sitzung zerstört, wenn jemand das Cookie Ihres Benutzers stiehlt und versucht, es als sein eigenes zu übergeben.

    
arnaslu 11.06.2011, 16:50
quelle
4
  

"wenn   es ist möglich, ein   gültiger Codeigniter-Session-Cookie   Ändern Sie den Wert der Benutzerkennung in   der Wert eines anderen Benutzers und   Änderungen an einem anderen Benutzer vornehmen   Konto. "

Meine Antwort ist nicht wirklich CI bezogen, also bitte bedenkt das.

Wenn Sie den Benutzer "username1" authentifizieren, sollte das, was für Authentifizierungszwecke an den Client zurückgesendet werden soll, ein Hash sein, den der Server mit diesem Benutzer korreliert. Die gesamte Kommunikation zwischen dem Client und dem Server basiert auf diesem Hash.

Der Server generiert einen eindeutigen Hash pro Benutzer und der Hash sollte eine kurze Lebenszeit haben. Kann jemand einen Hash erfassen und als dieser Benutzer weitergeben? Bestimmt. Deshalb sollten Sie auch nach dem Agenten und der IP des Benutzers suchen, um zu überprüfen, ob sie mit dem Hash übereinstimmen, um Session-Hijacking zu verhindern.

NIEMALS DAS TUN:
Wenn einige neue Entwickler gesehen werden, die den Benutzernamen in einem Cookie speichern und auf diesem Client eine Variable senden, um ihre Datenbanken zu aktualisieren. Tue das niemals. Vertrauen Sie niemals dem Kunden. Wenn der Server den Hash des Clients erhält, sollte er prüfen, ob er einem authentifizierten Benutzer gehört und die Benutzer-ID (Variable zum Aktualisieren der Benutzerdaten) vom Server holen. NIEMALS vom Kunden.

    
Frankie 11.06.2011 17:04
quelle
3

Ich bin mir nicht sicher, was genau Ihre "Benutzerkennung" ist. Die allgemeine Regel lautet: Speichern Sie im Sitzungscookie nur die Sitzungs-ID. Speichern Sie alles andere (wie eine Benutzer-ID) intern auf der Serverseite und rufen Sie sie mit der Sitzungs-ID ab.

Wenn der Benutzer die Sitzungs-ID (eine zufällige Zeichenfolge) ändert, wird eine neue Sitzung gestartet. Die Idee hinter der Sitzungs-ID ist, dass es unmöglich ist, die ID eines anderen Benutzers zu erraten - deshalb ist es zufällig und so lang.

    
Pekka 웃 11.06.2011 16:43
quelle