[PHP]$_SESSION prüfung sicher?

Matthiasnet

Well-known member
ID: 116869
L
14 August 2006
271
7
Hallo,

da ich mich momentan mit dem Thema Sessions intensiver auseinandersetze und ich oft sehe, dass zur Überprüfung lediglich etwas in der Art wie:
PHP:
if(!isset($_SESSION['username']) && $_GET['sid']) { 
header ("Location: ......");
}
benutzt wird, stellt sich mir die Frage, ob diese Variante sicher ist?

Session Id, übergebe ich immer über $_GET, habe mir auch schon überlegt das ganze mit .htaccess zu verstecken, damit eben niemand dran kommt.
Mit Cookies will/möchte ich nichts machen, da es eben auch die User gibt, die Cookies deaktiviert haben.

Wäre für ein(oder einige^^) Statements dazu dankbar.

Grüße

Matthiasnet
 
neija was heisst sicher, du hast an keiner Stelle überprüft ob schadhafter Code in der Variable steht bzw. wissen wir gar nicht was mit der Var angestellt, wir können nur anhand dem Variablennamen vermuten...
 
Nach dem einloggen wird der Variablenname username erstmal registriert mit
PHP:
$_SESSION["username"] = $_POST[username];
oder session_register(), dann wird dieser Wert eig. nur von Seite zur Seite weitergegeben....
Aber stimmt...am besten wäre wenn ich dann zusätzlich die ID des Benutzers speichere und dann zu der ID den Usernamen rausholle und diese dann mit $_SESSION["username"] vergleiche...
 
Alles was vom User kommt ist eben nicht sicher.

Alles was in $_SESSION steht, kann man auch nur als gesichert betrachten, wenn man alle Daten vor dem Eintragen davor überprüft hat.

Falls $_POST['username'] von dir nicht sorgfältig überprüft* wurde, kann man in diesem Fall natürlich Dinge damit anstellen ;)

*Auf SQL- und Code-Injections, Inhalt ....
 
Für was? Du kannst auf die Session jederzeit zugreifen ohne diese über die URL "weiterzugeben".
Ja aber dafür muss man das in der php.ini Datei eingestellt haben...kenn nicht den genauen Wert, aber habe es zumindest gelesen. Ich möchte es jedoch universell verwenden das es auch berall ohne bestimmte Einstellungen funktioniert oder sprichst du etwas anderes an?

@Johnson, danke für den Tip;)
 
Hier zum lesen: https://de2.php.net/_session

Was ich meinte: Ich verstehe dich so, dass du die Sessionid über die URL in einer Variablen weitergibst. Für was?
PHP:
$_SESSION['username'] = 'tobias1985'; //SESSION registrieren

PHP:
 echo $_SESSION['username']; //SESSION verwenden

Du brauchst da keine sid...
 
An die SessionID kommst du eigentlich immer. session_id(). Und Sessions kannst du nur haben wenn Cookies aktiviert werden, soviel ich weiß.
Das Übergeben der SessionID ist meiner Meinung nach Quatsch.
 
mhh, find gerade nicht das was ich suche, aber ich meinte gelesen zu haben, dass wenn in der php.ini eingestellt ist, das sessions nicht auto. weitergegeben werden, man es anders machen müsste(z.B. über $_GET).....

@chrissel, aber Sessions können doch auch weitergegeben werden wenn Cookies deaktiviert sind, sont würde man ja einen größeren Teil der User von Sessions ausschließen....hier setzt ja das mit der weitergabe der sessionid über $_GET ein, aber wenn sessions einfach so vom server auto. weitergegeben werden (und auch nicht umbedingt in cookies gespeichert werden müssen) kann man sich das mit der Weitergabe der SessioID sparen...


EDIT:
Das hier meinte ich:
PHP ist in der Lage, Links transparent umzuwandeln. Falls Sie nicht PHP 4.2 oder höher verwenden, müssen Sie das beim Übersetzen von PHP manuell aktivieren. Unter Unix müssen Sie dazu configure mit --enable-trans-sid aufrufen. Wenn diese Option und die Laufzeit-Option session.use_trans_sid aktiviert sind, werden relative URIs automatisch so geändert, dass sie die Session-ID enthalten.
Steht in dem Link von tobias1985
 
Zur Sachlage:

PHP ist in der Lage die SessionID per Cookie oder per URL (GET) von Seite zu Seite zu verfolgen. Welches Verfahren gewählt wird, hängt von der Einstellung in der PHP-ini ab. In jeden Fall muss man sich beim Programmieren darüber keinen Kopf machen. Wird die URL-Methode verwendet, wird die ID transparent übergeben, d.h. dass PHP die SessionID automatisch an jeden Link und in jedes Formular einfügt.

Ich meine mich zu erinnern, dass in der Standardeinstellung PHP beim ersten Seitenaufruf beide Verfahren einsetzt (also Cookie setzt und die URL's umschreibt) und dann sofern Cookies funktionieren nur noch dieses Verfahren verwendet.

Hinweis:
Viele Provider haben die URL-Methode deaktiviert, da das transparente Einfügen der ID sehr serverlastig ist und gewisse Sicherheitsmängel aufweist, da u.a. die Session über die URL schnell auch versehentlich vom User an andere User übergeben wird.
Richtig Sicher ist es - nach meiner Auffasung - eigentlich nur, wenn die Session auf Cookies, die nur bei SSL-verschlüsselten Verbindunegn gesetzt werden aufbauen (Auch dies kann man in der PHP-Ini irgendwie setzen).
Ich bevorzuge die reine, einfache Cookie-Lösung, da die paar Sicherheitsfanatiker, die unsinniger Weise Cookies deaktiviert haben, dann einfach mit den Nachteilen Ihres Sicherheitswahns leben müssen und dieses Verfahren im Allgemeinen Einsatz ausreichend Schutz vor dem entführen von Sessions gibt.