Quando si controlla una variabile di sessione per vedere se un utente è loggato, è sufficiente controllare se la variabile è impostata?

3

Quando si visualizza una pagina con contenuto che solo gli utenti loggati dovrebbero vedere, ho semplicemente controllato

if(isset($_SESSION['hasLoggedIn']))
{
  //show content
}
else
{
  echo 'you must log in';
}

In questo articolo consiglia di verificare l'indirizzo IP e browser ogni volta.

$_SESSION['login_string'] = hash('sha512', $password.$ip_address.$user_browser);

È necessario? Pensavo che dal momento che le variabili di sessione esistessero solo sul server, non sono propense ad attaccare? Non riesco a capire perché $password è lì. Se la password viene passata a ciascuna pagina, non sarebbe più facile per il database con la userid / password da interrogare, o è l'idea che in questo modo il database non debba essere interrogato (che richiede molto tempo) ?

    
posta Celeritas 22.03.2013 - 01:14
fonte

1 risposta

2

Ci sono altre cose da considerare per ottenere una gestione sicura della sessione, come l'uso di SSL, la rigenerazione dell'ID di sessione e altro. Ma per ottenere lo stato di login dalla sessione, è sufficiente verificare se è impostato un determinato valore, come hai fatto tu.

Naturalmente è possibile memorizzare ulteriori informazioni sulla connessione dell'utente nella sessione, ma la password e l'indirizzo IP non sono appropriati. Soprattutto la password non deve essere archiviata in chiaro sul lato server, ed è quello che ti serve per controllare l'hash nel tuo esempio. L'indirizzo ip non è un'informazione affidabile, potrebbe essere dinamico e cambiare durante la visita dell'utente. In questo caso all'utente verrà negato l'accesso, anche se ha effettuato l'accesso con successo prima.

Se vuoi memorizzare informazioni aggiuntive, ti consiglio di scrivere questa impronta digitale in una variabile separata come $ _SESSION ['client_fingerprint']. C'è un articolo da Chris Shiflett (vedere la sezione: Prevenzione della rappresentazione ), mostra che non ci sono molte informazioni appropriate per generare questa impronta digitale.

    
risposta data 22.03.2013 - 10:54
fonte

Leggi altre domande sui tag