Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    alcuni dubbi sulle sessioni

    Fondamentalmente non ho mai usato le sessioni e ho alcuni dubbi di concetto più che di codice vero e proprio...
    -Quando effettuo il login viene creato un cookie nel client che ha per nome un id univoco corrispondente a quello della sessione; è il comando session_start() che effettua quest'operazione? In molti thread ho letto che questo comando deve essere in assoluto la prima riga di codice della pagina, ma poi vedo anche qui sul forum esempi funzionanti in cui non è rispettata questa regola... qual'è la verità?
    -nelle pagine successive è sempre il comando session_start() che verifica l'esistenza del cookie e mi da accesso a tutti i contenuti dell'array &_SESSION ?
    -l'id di sessione posso/devo utilizzarlo per qualcosa, o è giusto che venga utilizzato solo in automatico per verificare che esista la sessione?
    -se quando effettuo il login, dopo session_start() scrivo

    $_SESSION['utente'] = $_POST["user"];

    e nella pagina protetta

    if(isset($_SESSION['utente'])

    il confronto per verificare se la sessione esiste viene effettuato sempre sull'id, o sul parametro che gli ho passato io? Insomma ho un po' le idee confuse... :-s

    Inoltre ho letto cose tipo:
    -non è corretto passare il nome in quanto è debole e facilmente indovinabile;
    -meglio utilizzare memcache per salvare gli id di sessione;
    -meglio salvare gli id in un DB;
    -meglio far passare gli id attraverso md5 prima di salvarli in un db;
    -meglio non far nulla di tutto ciò e utilizzare il nome utente perchè la sicurezza è la stessa...

    Offro una birra a chi mi chiarirà un po' di dubbi!!

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Quando effettuo il login viene creato un cookie nel client che ha per nome un id univoco corrispondente a quello della sessione; è il comando session_start() che effettua quest'operazione? In molti thread ho letto che questo comando deve essere in assoluto la prima riga di codice della pagina, ma poi vedo anche qui sul forum esempi funzionanti in cui non è rispettata questa regola... qual'è la verità?
    nelle pagine successive è sempre il comando session_start() che verifica l'esistenza del cookie e mi da accesso a tutti i contenuti dell'array &_SESSION ?
    nelle pagine successive è sempre il comando session_start() che verifica l'esistenza del cookie e mi da accesso a tutti i contenuti dell'array &_SESSION ?
    session_start, con configurazione standard del php.ini, verifica se esiste un cookie di nome PHPSESSID. Se tale cookie non esiste lo crea assegnandogli un id univoco per ogni utente che visita il sito. Se esiste lo utilizza per inizializzare l'array $_SESSION. Al termine dello script il contenuto dell'array $_SESSION è serializzato all'interno di un file avente come parte del nome l'id contenuto nel cookie.

    Tutto ciò è trasparente e basta invocare session start per provocarlo. Dato che session_start opera con i cookie, e considerato che i cookie viaggiano nell'header della pagina, gioco forza session_start va chiamato prima che sia prodotto un qualunque output. Per non sbagliare, di norma è chiamato immediatamente come prima istruzione.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    se quando effettuo il login, dopo session_start() scrivo

    $_SESSION['utente'] = $_POST["user"];

    e nella pagina protetta

    if(isset($_SESSION['utente'])
    Ammesso che tu abbia verificato che l'utente esiste ed assegni a $_SESSION['utente'] il nome utente (utilizzare $_POST['user'] potrebbe essere accettabile), puoi assumere che l'utente sia loggato fintanto che esiste $_SESSION['utente']

    il confronto per verificare se la sessione esiste viene effettuato sempre sull'id, o sul parametro che gli ho passato io?
    Questa non l'ho capita!

    Inoltre ho letto cose tipo:
    -non è corretto passare il nome in quanto è debole e facilmente indovinabile;
    -meglio utilizzare memcache per salvare gli id di sessione;
    -meglio salvare gli id in un DB;
    -meglio far passare gli id attraverso md5 prima di salvarli in un db;
    -meglio non far nulla di tutto ciò e utilizzare il nome utente perchè la sicurezza è la stessa...
    Ciò che viaggia sulla rete è l'id di sessione, memorizzato in un cookie con scadenza alla chiusura del browser. Non puoi evitare che ciò accada. Detto questo l'id è parte del nome di un file temporaneo memorizzato in una cartella non accessibile dal web e che, sul server che ospita il sito, contiene in chiaro tutti i dati di sessione. A questo punto valuta tu il grado di rischio che la cosa comporta.

    Ovviamente un utente malizioso (che faccia sniffing sul traffico di rete) che si appropri di un id di sessione può agevolmente spacciarsi ed accedere al sito utilizzando i dati di sessione di un'altro.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    l'id di sessione posso/devo utilizzarlo per qualcosa, o è giusto che venga utilizzato solo in automatico per verificare che esista la sessione?
    Di norma non occorre che tu faccia nulla. Esistono però delle condizioni in cui è necessario inserire l'id di sessione nella url. Ad esempio ilc aso più semplice è se i cookie sono diasabilitati. Ciò al fine di consentire la propagazione tra le pagine dell'id e il conseguente accesso ai dati di sessione dell'utente.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ciao, grazie per le risposte prima di tutto... inizia ad essere più chiaro ma approfitto per chiederti ancora qualcosa...

    nella pagina di login, dopo aver verificato la correttezza di user e password, richiamo session_start() senza passare nessun parametro...
    viene creato il cookie con id univoco sul client e da qualche parte sul server verrà memorizzato quest'id univoco, corretto?
    Nella pagina protetta, come prima istruzione richiamo session_start();
    A questo punto se ho capito bene, l'id di sessione dal cookie viene confrontato con quelli memorizzati nella cartella sul server di cui parlavi tu e se c'è una corrispondenza, "apre una sessione" ossia ho accesso ai campi dell'array $_SESSION, che però in questo caso, non avendo passato altri parametri in fase di login, non conterrà nulla oltre l'id? E' corretto, oppure cos'altro contiene di default quell'array?

    Nel caso più comune invece in cui ho bisogno di poter accedere ai dati dell'utente da una pagina all'altra, faccio come ho scritto prima, ossia effettuo il login, apro la sessione e inserisco nell'array qualcosa tipo il nome utente...
    nelle pagine successive session_start() mi apre la sessione, recupero il nome utente e con quello posso interrogare il db per accedere a tutti gli altri dati di quell'utente di cui ho bisogno... è corretta la logica?
    A questo punto direi che devo sempre inserire un parametro dell'utente nell'array $_SESSION in fase di autenticazione al form di login, altrimenti nelle successive pagine come posso fare un controllo del tipo if isset($_SESSION)) ?

  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    viene creato il cookie con id univoco sul client e da qualche parte sul server verrà memorizzato quest'id univoco, corretto?
    in parte, l'id sul server non è memorizzato se non come parte del nome di un file temporaneo sul server.

    A questo punto se ho capito bene, l'id di sessione dal cookie viene confrontato con quelli memorizzati nella cartella sul server di cui parlavi tu e se c'è una corrispondenza, "apre una sessione" ossia ho accesso ai campi dell'array $_SESSION, che però in questo caso, non avendo passato altri parametri in fase di login, non conterrà nulla oltre l'id?
    l'id ottenuto dal cookie PHPSESSID è utilizzato per comporre il nome del file temporaneo e verificarne l'esistenza. Se non esiste il file è creato ed è vuoto. Il file è letto e se vuoto comporta l'inizializzazione di $_SESSION come array vuoto, altrimenti il conetnuto (un array PHP serializzato) è ricomposto nella variabile superglobal $_SESSION. Quindi per $_SESSION in prima istanza avrai

    is_array($_SESSION) == true
    isset($_SESSION) == true
    empty($_SESSION) == true

    ossia è un array vuoto.

    Nel caso più comune invece in cui ho bisogno di poter accedere ai dati dell'utente da una pagina all'altra, faccio come ho scritto prima, ossia effettuo il login, apro la sessione e inserisco nell'array qualcosa tipo il nome utente...
    nelle pagine successive session_start() mi apre la sessione, recupero il nome utente e con quello posso interrogare il db per accedere a tutti gli altri dati di quell'utente di cui ho bisogno... è corretta la logica?
    La logica è corretta, ma non è detto che tu debba lavorare per forza con il nome utente.

    A questo punto direi che devo sempre inserire un parametro dell'utente nell'array $_SESSION in fase di autenticazione al form di login, altrimenti nelle successive pagine come posso fare un controllo del tipo if isset($_SESSION)) ?
    Sì, hai sempre bisogno di qualcosa che ti riconduca in modo univoco all'utente oppure fai uso dell'autenticazione HTTP (http://php.net/manual/en/features.http-auth.php). Comunque hai bisogno di un sistema per trattenere l'informazione sull'utente loggato e riconoscerlo quando richiede una pagina.

    L'informazione quindi transita sulla rete e per proteggerla non puoi fare altro che criptrla con il protocollo https, e criptarla su server e client, fermo restando che ogni sistema è sicuro fino a quando non è dimostrato il contrario che equivale a dire che nessun sistema può essere sicuro al 100%. Ciò in ragione del fatto che non è possibile prevedere tutti i modi in cui il sistema può essere attacato fino a quando tale attacco non avviene.

    D'altra parte aumentare la sicurezza comporta un aumento della complessità e dei costi.

    Nel caso dell'affidare l'autenticazione ad un cookie sul client, comporta il rischio di furto d'identità da parte di chi riesca ad appropiarsi di quell'id prima che PHP abbia il tempo di eliminare il file temporaneo (perchè l'utente sta ancora operando o perchè ha chiuso il browser da poco senza fare logout e darti la possibilità di rimuovere i dati da $_SESSION).

    Il discorso però si sta facendo troppo lungo.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Grazie 1000 sei stato chiarissimo

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Originariamente inviato da Grino La logica è corretta, ma non è detto che tu debba lavorare per forza con il nome utente.
    Ne approfitto per chiederti un'ultima cosa;
    Al momento nelle prove che sto facendo utilizzo il nome utente perchè è l'unico campo che mi permette di risalire univocamente all'utente loggato, ma essendo un campo "pubblico" (ad esempio i nomi utente sarebbero visibili su un'eventuale forum), c'è qualche vulnerabilità che permette ad un utente smaliziato di utilizzare il nome utente di qualcun altro per modificare la propria sessione? Se ho capito il meccanismo direi di no, o almeno non in maniera banale, dovendo ricorrere comunque a tecniche di sniffing o xss, o sbaglio?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.