Le sessioni si basano sull'identificatore di sessione, una stringa che identifica in modo univoco una sessione del browser tramite un cookie 1 impostato sul client quando viene chiamato session_start()
. Poiché si basano sui cookie, dovresti trattarli come input dell'utente e non dovresti mai assolutamente fidarti dell'input dell'utente. I cookie possono essere rubati tramite XSS , e i cookie PHP non sono crittografati per impostazione predefinita.
Le sessioni sono memorizzate nella directory %TEMP%
, a seconda di quale potrebbe essere per il tuo sistema. La posizione di salvataggio può essere modificata dalla direttiva session.save_path oppure dal session_save_path durante il runtime, ma su un tipico ambiente di hosting 2 , è generalmente considerato più facile accedere al file system rispetto a un database.
I vari problemi di sicurezza sono trattati nel manuale :
The session module cannot guarantee that the information you store in a session is only viewed by the user who created the session.
...
Assess the importance of the data carried by your sessions and deploy additional protections -- this usually comes at a price, reduced convenience for the user.
...
The session module cannot guarantee that the information you store in a session is only viewed by the user who created the session.
La fissazione della sessione è la buzzword comunemente citata, puoi trovare qualche informazione in più sul Vulnerabilità nella fissazione della sessione in applicazioni basate sul Web articolo a cui si fa riferimento nel manuale.
La funzione session_set_save_handler () ti consente di scegliere in modo trasparente dove si trovano le sessioni salvato:
session_set_save_handler() sets the user-level session storage functions which are used for storing and retrieving data associated with a session. This is most useful when a storage method other than those supplied by PHP sessions is preferred. i.e. Storing the session data in a local database.
Dopo aver creato e impostato il gestore, puoi continuare a utilizzare le sessioni normalmente. Ci sono alcuni esempi sui commenti alla pagina di manuale su come memorizzare le sessioni in un database. Memorizzare le sessioni in un database ha un importante svantaggio: se per qualsiasi motivo il database non funziona, allora hai perso tutto ciò che hai costruito attorno alle sessioni.
1 Puoi propagare l'id della sessione tramite un parametro URL , ma sono più problemi di quanti ne valga.
2 Con tipico intendo hosting condiviso a basso costo.