come creare un sistema di login php sicuro, consentendo di “Resta collegato” funzionalità?

StackOverflow https://stackoverflow.com/questions/1929340

Domanda

Io uso un sistema di login semplice sulla base di Vars sessione. Una volta che l'utente accede a una sessione di var è impostata che racconta il mio script che l'utente debba essere accettato. Io non uso dei cookie lato client personalizzato var.

Vorrei offrire l'opzione nella schermata di login che dice "Continuo a me loggued in tutta la giornata". Come si fa a farlo in modo sicuro?

È stato utile?

Soluzione

In primo luogo: Configurare il session.cookie_lifetime direttiva , sia in php.ini, i file di configurazione, o tramite session_set_cookie_params() .

Avanti, memorizzare il nome utente e il valore hash della password nella sessione, e confermare che login in ogni pagina. Finché è ancora valida, si arriva a rimanere connesso.

naturale scadenza del cookie di sessione dovrebbe generalmente tenere le cose in ordine, come non sarà necessario che nessuno si registrato nel bel mezzo della loro sessione (se le stelle allineate per essa, ovviamente) se mantenerlo attivo. In mancanza di questo, però, mi piacerebbe prendere in considerazione la soluzione di eCartoth un secondo vicino, come si può solo aggiungere una seconda linea per l'istruzione if:

if (my_validate_user_function($_SESSION['username'],$_SESSION['passhash']) 
    && $_SESSION['deathstamp'] > time()
) {
    // user is logged in again, oh boy!
}
else {
    // send in the death robots
    header('Location: /login.php',true,302);
}

EDIT: Una cosa che si potrebbe prendere in considerazione è la sessione di fissazione e / o dirottamento di sessione. Al fine di evitare che, io consiglierei di uno (o entrambi) di due soluzioni:

  1. memorizzare l'indirizzo IP dell'utente nella sessione
  2. session_regenerate_id() dopo ogni tentativo di accesso riuscito.

Altri suggerimenti

Quando si dice "Resta collegato tutto il giorno", Sto assumendo vuoi dire solo su quella macchina specifica, giusto? Si potrebbe utilizzare una tabella MySQL per ricordare 'il tempo di accesso', o di un timestamp di quando che login non sarà più valida se scelgono di mantenere se stessi clienti registrati per tutto il giorno. Quindi aggiungere un po 'di script per l'inizio del codice che recupera l'ID di quell'utente dalle vars sessione. Confrontare il timestamp corrente di tale utente contro le stored 'ts ultima validi' e se è passato che il tempo, si sa che devono essere registrati fuori, a quel punto si cancella la sessione e obbligare l'utente ad accedere nuovamente. Questo metodo significa che non verranno effettivamente disconnessi fino a quando non provare a fare qualcosa oltre quel punto, ma vi sembrerà a loro. Inoltre, invece di usare un DB MySQL si potrebbe anche negozio che ultimi TS validi in una variabile di sessione pure.

Così, per esempio, quando l'utente accede prima con "Resta collegato tutto il giorno selezionato":

$_SESSION['log_me_out_at'] = strtotime(date("Y-m-d ")."23:59:59");

Poi, ogni volta che una pagina si accede nel sistema:

if( $_SESSION['log_me_out_at'] < time() ){
  unset($_SESSION['user_is_accepted_in']);
}

Una possibilità potrebbe essere quella di impostare una tabella di MySQL che salva le variabili di sessione e li associa con indirizzi IP e una scadenza, ma non sono sicuro di tutti i dettagli su come eventualmente intraprese.

Il più semplice (anche se non consigliato) modo per fare quello che stai cercando potrebbe essere quella di impostare un $_COOKIE con il nome utente e la password sul computer, che il vostro sito sarà quindi controllare per quando il utente accede via.

Per una maggiore sicurezza, Si sarebbe meglio servito a salvare solo un biscotto come un hash MD5 salata dei dati degli utenti al fine di fornire un potenziale hacker di meno informazioni sui dati di account dell'utente. La durata può essere impostata quando si imposta il cookie; php.net ha una documentazione ragionevolmente completa su come farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top