Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [PHP] $_SESSION quanto è affidabile?

    Salve a tutti!
    Sto facendo un progettino in PHP, niente di così difficoltoso: sostanzialmente si tratta di gestire una lista di clienti e di poterla modificare da qualsiasi punto del pianeta dove ci sia un accesso web.
    In pratica ci sono due livelli di accesso: user e admin, l'user può visualizzare la lista di clienti e modificarne solo alcune cose (nome cognome e qualche altra cosina), l'admin può visualizzare la lista di clienti modificare quello che vuole e cancellare se gli va anche tutta la lista.

    Ok questa è la panoramica generale, detto questo è ovvio che per gestire la sicurezza e i vari livelli di accesso mi sono affidato alle sessioni e per memorizzare i dati di sessione (indirizzo ip, username, password, livello di accesso, ecc.) ho usato $_SESSION['variabile'] effettuando diversi i diversi controlli tra i quali anche quello di un eventuale cambio di indirizzo ip durante la navigazione (e in questo caso ripetendo il login).
    Ma mi è venuto il dubbio che anche il tutto non fosse abbastanza sicuro.
    Ho letto molto in rete, ma alcune cose mi hanno soltanto confuso le idee... ho letto qualcosa sul Session HiJacking e qualche articolo che consigliava di usare delle tecniche con delle funzioni di sessione ( tipo session_register() ) che io non ho mai usato.

    Allora chiedo a qualcuno che ne sa più di me... $_SESSION fino a che punto è sicuro? C'è qualcosa in più che si può fare o si tratta soltanto di effettuare più controlli possibile sui dati di sessione?

    PS Dimenticavo di dire che register_global sull'host (aruba) in PHP.ini è settato su ON... mi conviene settarlo ad OFF? Se si, come posso farlo dal mio script?

    Grazie millllllle.

  2. #2
    Intanto ti direi di mettere in sicurezza la parte admin tramite un autenticazione htaccess, e stai sicuro...almeno per quello

  3. #3

    Re: [PHP] $_SESSION quanto è affidabile?

    Io non sono un esperto (ma sto sudiando conscio che forse non lo diventerò mai...) e tu sei di sicuro più bravo di me... ma ne approfitto per imparare qualcosa

    Ti dico le cose che ho studiato aspettando che arrivi un esperto a correggere eventuali imprecisioni (ca**ate) che scriverò (sono interessato all'argomento).

    La principale falla che può provenire dalle sessioni è definita "session hijacking" ("session fixation" è la stessa cosa?).
    Facendo un copia e incolla dei miei appunti (caserecci):
    "La logica sulla quale si basano le sessioni può essere semplicisticamente descritta in tal modo: tutte le volte che un utente, tramite browser, effettua una visita ad un sito questo assegna a tale utente un id di sessione; durante tutta la navigazione, l'utente si porterà dietro questo id come identificativo univoco della sessione.

    Il server registrerà le informazioni raccolte durante la navigazione su un file di testo che verrà salvato in remoto (ovvero sul server, generalmente nella cartella tmp, la cartella di file temporanei). Il file avrà come nome l'id di sessione così che ogni utente avrà il propio file con le proprie variabili di sessione.".

    Le session hijacking si hanno quando un utente impossessandosi dell'id di sessione di un altro utente ha la possibilità di spacciarsi per esso.
    Le soluzioni:
    - utilizzare session_regenerate_id(): questo comando introdotto dopo ogni chiamata di session_start() "rinomina" di volta in volta la sessione; quindi anche se un utente disgraziato dovesse impossessarsi dell'id di sessione questo diventa inutilizzabile (fonti: http://php.html.it/guide/lezione/300...sion-fixation/).
    - memorizzare in una variabile di sessione l'IP del client e NON accettare connessioni successive se non dallo stesso IP. L'indirizzo IP del client è contenuto nella variabile superglobale $_SERVER['REMOTE_ADDR'] (fonte: http://www.dti.unimi.it/sassi/LIA2008/lez19e20.htm).
    - impostare una cartella di salvataggio dei file di sessioni diversa da quella di default (la cartella temporanea del server) con il comando session_save_path() (tieni presente che il garbage, cioè l'autocancellazione a scadenza dovrà essere gestito).

    Originariamente inviato da Difficile
    sessioni e per memorizzare i dati di sessione (indirizzo ip, username, password, livello di accesso, ecc.)
    Per quanto ne sò è da evitare il salvataggio di dati sensibili (password) in sessione

    Originariamente inviato da Difficile
    tipo session_register() )
    per quanto ne sò è inutile con le nuove versioni di php dato che la valorizzazione può essere fatta direttamente con

    $_SESSION['variabile']="valore";

  4. #4
    $_SESSION è affidabile a patto di adottare alcuni accorgimenti:

    Aggiornare il SID, per evitare possibili furti di identità (session hijacking) tramite la funzione session_regenerate_id();

    Salvare i dati di sessione su database;

    Inoltre negli hosting condivisi, è bene cambiare il path ove viene salvato il file di sessione sul server... questo per evitare che altri script (di altre applicazioni e utenze) possano leggere il file di sessione.


  5. #5
    Originariamente inviato da Samleo
    Intanto ti direi di mettere in sicurezza la parte admin tramite un autenticazione htaccess, e stai sicuro...almeno per quello
    Ah bueno... non ci avevo pensato... sicuramente è una cosa che farò.
    ThankZ.

    - utilizzare session_regenerate_id(): questo comando introdotto dopo ogni chiamata di session_start() "rinomina" di volta in volta la sessione; quindi anche se un utente disgraziato dovesse impossessarsi dell'id di sessione questo diventa inutilizzabile (fonti: http://php.html.it/guide/lezione/30...ssion-fixation/).

    - memorizzare in una variabile di sessione l'IP del client e NON accettare connessioni successive se non dallo stesso IP. L'indirizzo IP del client è contenuto nella variabile superglobale $_SERVER['REMOTE_ADDR'] (fonte: http://www.dti.unimi.it/sassi/LIA2008/lez19e20.htm).

    - impostare una cartella di salvataggio dei file di sessioni diversa da quella di default (la cartella temporanea del server) con il comando session_save_path() (tieni presente che il garbage, cioè l'autocancellazione a scadenza dovrà essere gestito).

    Per quanto ne sò è da evitare il salvataggio di dati sensibili (password) in sessione
    Yea... ottimo il session_regenerate_id().
    Per quanto riguarda il session_save_path() mi informerò perchè non l'ho mai usato
    Per il salvataggio di dati sensibili... sbagliato a scrivere per fare di fretta ci ho messo un pò tutto, ma hai perfettament ragione
    Controllo sull'IP Address lo effettuo già... ed è una cosa che in effetti ti mette al sicuro in una certa percentuale.

    $_SESSION è affidabile a patto di adottare alcuni accorgimenti:

    Aggiornare il SID, per evitare possibili furti di identità (session hijacking) tramite la funzione session_regenerate_id();

    Salvare i dati di sessione su database;

    Inoltre negli hosting condivisi, è bene cambiare il path ove viene salvato il file di sessione sul server... questo per evitare che altri script (di altre applicazioni e utenze) possano leggere il file di sessione.
    Tutto claro... non ho capito solo perchè salvare i dati di sessione su un DB


    GRAZIE A TUTTI PER LE RISPOSTE!

  6. #6
    I file di sessione vengono salvati su una directory temporanea del server, condivisa anche con altri domini presenti sullo stesso server. E' consigliabile modificare il path per il salvataggio delle sessioni con l'istruzione:

    Codice PHP:
    ini_set("session.save_path","percorso/mydir/"); // setting the temporary cookie session path
    session_start();
    // etc. 
    e anche evitare la creazione di variabili di sessione contenenti username, password, etc... ma utilizzare una tabella su db la cui chiave primaria sia il SID, e che abbia altri campi corrispondenti alle informazioni di sessione che ti interessa gestire.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.