È sicuro usare la sessione per verificare se l'utente ha effettuato l'accesso?

2

Ho cercato "come verificare se l'utente ha effettuato l'accesso" e la maggior parte delle risposte che ho trovato (su Stack Overflow) devono utilizzare le sessioni PHP. Le mie domande sono:

  1. Devo affidarmi esclusivamente alle sessioni PHP per verificare se l'utente ha effettuato l'accesso?
  2. Devo utilizzare il database esclusivamente ogni volta che controllo se l'utente ha effettuato l'accesso? (Questo è quello che sto usando in questo momento.)
  3. Devo usarli entrambi?

Ci sono vulnerabilità / attacchi di cui ho bisogno di essere a conoscenza?

    
posta Dumb Question 14.12.2016 - 06:14
fonte

3 risposte

2

Una sessione è qualcosa che usi per non far inserire la password ad ogni richiesta. Si archiviano tutti i dati necessari all'utente (ad es. È il login, con quale username, ecc.) Sul server in una sorta di tabella di ricerca. Quindi si passa l'ID necessario per visualizzare le informazioni all'utente, in modo che possa utilizzarlo per l'autenticazione senza password in futuro.

Ci sono molti modi per implementarlo. Tutte le implementazioni richiedono una tabella di ricerca (per memorizzare i dati in), un generatore di ID sessione casuale e un cookie o un altro modo per passare l'ID tra l'utente e il client.

PHP viene fornito con un'implementazione pronta all'uso. Se usi le funzioni di sessione PHP PHP si occuperà di generare l'ID, l'impostazione e la lettura dei cookie, e cercare i dati della sessione (che PHP salva nei file sul disco) per te. Non devi preoccuparti di queste cose.

Ovviamente potresti scrivere la tua implementazione, usando un database come tabella di ricerca. Tuttavia, ci sono molte cose complicate sull'implementazione e, a meno che tu non sappia cosa stai facendo, è facile commettere errori impercettibili che renderanno il tuo sistema insicuro. Pertanto ti consiglio di andare con la soluzione che PHP ti ha già fornito.

Infine, non è necessario utilizzare entrambe le sessioni PHP e un database solo per verificare che l'utente abbia effettuato l'accesso. Uno è sufficiente e aggiungerne un altro non ti dà alcun vantaggio in termini di sicurezza. (Potresti, ovviamente, utilizzare il database per cercare informazioni sull'utente che ha effettuato l'accesso, come nome utente ed e-mail, ma è un'altra questione.)

    
risposta data 14.12.2016 - 12:45
fonte
3

Quale sarebbe il tuo piano altrimenti? Le sessioni sono solo un modo per indicare che un utente si è autenticato di recente, quindi non devi continuare a chiedere la password per ogni richiesta.

Chiedi se devi anche controllare il database. Se non stai controllando il database, come stai verificando che il token di sessione fornito sia valido?

L'attacco più comune contro le sessioni è rubare una sessione . Le misure preventive più comuni sono https su ogni connessione che include una sessione e sessioni con scadenza automatica (idealmente non abbastanza spesso che gli utenti si lamentino) quindi una sessione rubata è utile solo per un tempo limitato.

    
risposta data 14.12.2016 - 06:28
fonte
-1
  1. solo ID sessione, caso 1

Se ti affidi esclusivamente alla sessione per verificare se l'utente è connesso o meno, allora dovresti controllare l'id della sessione ad ogni passaggio durante e dopo il login dato che esiste una possibilità di dirottamento di sessione può essere possibile per un utente malintenzionato modificare l'id di sessione dell'utente corrente con qualcun altro.

  1. solo database, caso 2

Non dovresti prendere in considerazione questa opzione in quanto rallenta le prestazioni del portale se controlli ogni volta se l'utente corretto è connesso o meno.

  1. sia sessione che database, caso 3

Vai sempre con questa opzione, dato che non devi passare attraverso il database ogni volta e assicurati di verificare se il session_id corretto è loggato o meno, inoltre cerca sempre di crittografare anche questo ID di sessione dato che c'è anche una possibilità per l'attaccante di eseguire replay attack se non verifichi se l'attività viene ripetuta o meno.

    
risposta data 14.12.2016 - 06:39
fonte

Leggi altre domande sui tag