php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.07.2006, 18:12  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard PHP eigene Session ID Generierung

Hallo liebes Forum,

bisher scheue ich mich noch einen Blick in den PHP-Quellcode zu werfen (bzw. diesen herunterzuladen), deshalb meine Frage:
Weiß jemand, welchen Mechanismus PHP verwendet, um SessionIDs zu generieren? Ich meine damit mehr als nur die Tatsache, daß es sich um einen md5 Hash handelt? Die Dokumentation schweigt sich darüber leider aus. Und stellt das PHP Sessionmanagement eigentlich sicher, daß bei session_start() eine bereits existente sess_... Datei nicht überschrieben wird (so unwahrscheinlich dieser Fall auch ist sollte das eigentlich sein).

Konkret geht es darum, eine Alternative der leider erst in php5 vorhandenen session_regenerate_id () Funktion zu programmieren um eine wirkungsvolle Trennung von public und private Nutzern zu realisieren.

Danke im Voraus
--n
nikosch ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.07.2006, 18:18  
Gast
 
Beiträge: n/a
Standard Re: PHP eigene Session ID Generierung

Zitat:
Zitat von nikosch77
bisher scheue ich mich noch einen Blick in den PHP-Quellcode zu werfen
Trau Dich ruhig ran. Ist kein chinesisch und auch ohne tiefere C-Kenntnisse zu verstehen...

Zitat:
Zitat von nikosch77
Weiß jemand, welchen Mechanismus PHP verwendet, um SessionIDs zu generieren?
http://lxr.php.net/source/php-src/ex.../session.c#557
  Mit Zitat antworten
Alt 17.07.2006, 18:30  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: PHP eigene Session ID Generierung

Zitat:
Zitat von nikosch77
Konkret geht es darum, eine Alternative der leider erst in php5 vorhandenen session_regenerate_id () Funktion zu programmieren um eine wirkungsvolle Trennung von public und private Nutzern zu realisieren.
misch dich nicht in die interna der sessionbehandlung ein, und knüpfe die bedingung, ob ein user 'public' oder 'private' ist, nicht an die existenz einer session an. das hat viele gründe.
setze eine session-variable, z.b. $_SESSION['userID'], wenn sich der user einloggt, und lösche diese variable wieder, wenn sich der user ausloggt. die session bleibt die gleiche.

auch nach 6 jahren täglicher programmierung ist mir wirklich (!!!) noch kein sinnvoller grund eingefallen, session_regenerate_id() verwenden zu müssen. du wirst es also mit sicherheit auch nicht brauchen.

grüße
axo
axo ist offline   Mit Zitat antworten
Alt 17.07.2006, 19:07  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard Re: PHP eigene Session ID Generierung

@axo
Die session_regenerate_id() sollte im Hinblick auf Session Fixation verwendet werden.
Die Umgebung soll verschiedene User-Stati verwenden, 'public-Modus' um anwendungsspezifische Steuerdaten zu speichern (ohne jegliche Sicherheitsrelevanz, ohne Bindung an Usernamen und dergleichen), 'private' um eingeschränkte Nutzerbereiche zu definieren. Selbige sind nur für einen bestimmten UserStatus (in Session gespeichert) sichtbar (Vergabe erfolgt durch DB-Anfrage während des Logins), die eigentliche Authentifizierung erfolgt bei Aufruf dann über einen Datenbank-Abgleich (Status-zu-Useridentität), die dazu ebenfalls in der Session ID gespeicherte md5's von UserName und UserPasswd übermittelt bekommt. Als Restrisiko verbleiben die Klartext-Datenübertragung aus dem Loginformular und evl. Sessiondiebstahl/Bruteforceing.

Die eigentliche Gefahr liegt in der Statusänderung. Da jedermann eine public Session zugewiesen bekommt, könnte er sie (während er die Session am Leben hält) einem Nutzer unterschieben und durch dessen Anmeldung einen höheren Nutzerstatus erreichen, die betr. SessionID ist ihm ja bekannt.

Sicher wäre es genauso möglich getrennte Speicherbereiche dür die SessionIDs zu benutzen, ich hielt session_regenerate_id () für die elegantere Methode.

Zitat:
Zitat von axo
knüpfe die bedingung, ob ein user 'public' oder 'private' ist, nicht an die existenz einer session an. das hat viele gründe.
Ich bin für Hinweise auf solche Gründe stets offen, vor allem wenn jemand jahrelange Praxiserfahrung, sicher auch in Punkto PHP Sicherheit gesammelt hat.


@karl-150
Danke für den Link, werde mich in ner ruhigen Minute mal damit befassen...

--n
nikosch ist offline   Mit Zitat antworten
Alt 17.07.2006, 19:14  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
bisher scheue ich mich noch einen Blick in den PHP-Quellcode zu werfen
Och, kann net schaden, auch wenn mans net checkt
Zitat:
Und stellt das PHP Sessionmanagement eigentlich sicher, daß bei session_start() eine bereits existente sess_... Datei nicht überschrieben wird (so unwahrscheinlich dieser Fall auch ist sollte das eigentlich sein).
Is recht einfach: Parallel wird noch auf die Existenz der sess_*-Datei und auf die Gültigkeit selbiger geprüft.
Zitat:
Konkret geht es darum, eine Alternative der leider erst in php5 vorhandenen session_regenerate_id () Funktion zu programmieren um eine wirkungsvolle Trennung von public und private Nutzern zu realisieren.
Konkret versteh ich auch net, warum das wirkungsvoller sein soll ^^
Zitat:
auch nach 6 jahren täglicher programmierung ist mir wirklich (!!!) noch kein sinnvoller grund eingefallen, session_regenerate_id() verwenden zu müssen. du wirst es also mit sicherheit auch nicht brauchen.
Du kannst zB damit Session-Diebstahl minimieren. Ebenso wird der Cookie erneuert, falls es damit Schwierigkeiten gab (welche auch immer ). Die Anwendungsgebiete dürften auch recht gering sein.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Alt 17.07.2006, 20:11  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard Re: PHP eigene Session ID Generierung

Zitat:
Zitat von nikosch77
Konkret geht es darum, eine Alternative der leider erst in php5 vorhandenen session_regenerate_id () Funktion zu programmieren um eine wirkungsvolle Trennung von public und private Nutzern zu realisieren.
session_regenerate_id() existiert seit PHP 4.3.2. Das sollte doch ausreichend sein.
xabbuh ist offline   Mit Zitat antworten
Alt 17.07.2006, 20:34  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard Re: PHP eigene Session ID Generierung

Zitat:
Zitat von xabbuh
session_regenerate_id() existiert seit PHP 4.3.2.
Aber erst seit 5.1.0 mit dem Parameter die alte Session zu entfernen...
nikosch ist offline   Mit Zitat antworten
Alt 17.07.2006, 20:56  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

session_regenerate_id() sollte bei jedem Neustart einer Session und be jedem Statuswechsel des Benutzers durchgeführt werden.

Du könntest die Funktion natürlich von Hand nachbauen, denn die Session-Dateien sind ja les- und schreibbar (und umbenennbar - aber erst Link setzen, um Race Conditions auszuschließen). Aber eigentlich sollte es doch reichen, wenn du $_SESSION leerst und dann session_regenerate_id() ohne den zweiten Parameter aufrufst. Zumindest kannst du das ja leicht testen, ob die alte Session-Datei dann auch wirklich leer ist. Und der Keks wird ja überschrieben.

Basti
Basti ist offline   Mit Zitat antworten
Alt 17.07.2006, 21:23  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich sehe den sinn dahinter immer nicht. $_SESSION = array(); reicht, um einen kompletten statuswechsel zu generieren - je nachdem wie der rest des codes aussieht. da kann jemand die session klauen, wie sie lustig ist. ne, leuchtet mir noch nicht ein.
axo ist offline   Mit Zitat antworten
Alt 17.07.2006, 21:56  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Nimm an, jemand baut auf seiner Seite einen Link zu deiner Seite ein, generiert aber vorher eine Sessionid (meinetwegen 123456), die er dem Link mitgibt und loggt diese Sessionid mit. Nachdem du dich nun auf deiner Seite eingeloggt hast, kann der Angreifer deine Session einfach übernehmen, da ihm die Sessionid ja bereits bekannt ist.

Zitat:
Aber erst seit 5.1.0 mit dem Parameter die alte Session zu entfernen...
Das lässt sich sehr einfach nachbauen (Beispiel ursprünglich von ignatz, ich finde leider den entsprechenden Beitrag nicht mehr wieder):
PHP-Code:
<?php
    session_start
();
    
$tmp $_SESSION;    //  Sessiondaten zwischenspeichern
    
$_SESSION = array();    //  existierende Session überschreiben
    
session_write_close();
    
session_regenerate_id();    //  neue Sessionid generieren
    
$_SESSION $tmp;    //  Sessiondaten wiederherstellen
?>
xabbuh ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Session Variablen als Referenz!? O_o Sam781 PHP-Fortgeschrittene 4 01.10.2007 11:19
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
Session in Session tinchen PHP Tipps 2007 22 21.03.2007 19:53
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
Session Logout Login Navigation TailerD PHP Tipps 2006 10 24.06.2006 17:12
[Erledigt] php session problem :( PHP Tipps 2005-2 5 21.10.2005 16:37
Session wird nicht angelegt PHP Tipps 2005-2 7 24.07.2005 13:35
Kreieren einer Session PHP Tipps 2005 11 28.05.2005 15:16
Session error nach Umstellung auf PHP 5 PHP Tipps 2005 15 13.05.2005 14:35
verliere Session Sonja PHP Tipps 2005 3 27.04.2005 09:32
Session Problem PHP-Fortgeschrittene 3 18.02.2005 14:37
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28
$_GET und Session PHP Tipps 2004 9 20.06.2004 19:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
session id generieren, eigene session id, php eigene session id, php eigene session, php session diebstahl, eigene session, http://www.php.de/php-fortgeschrittene/41245-php-eigene-session-id-generierung.html, session_id setzen, session diebstahl, php session id generieren, php session sess_, php session oder eigene session, php sichere session id generieren, eigene session variable, sichere session id generieren, session id generieren php, session id wiederherstellen, eigene session php, warum eigene session id, php session id sicherheit

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:20 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.