2011-01-20 18 views
8

Durante il periodo in cui ho trascorso delle pause dall'apprendimento di come PHP supporta Unicode, ho cercato di rendere i miei cookie "Remember Me" un po 'più sicuri. Comunque ci sono alcune cose che non capisco e alcune delle mie riflessioni mi piacerebbe qualche suggerimento e opinione su.PHP: Ricordami e sicurezza?

1) Esiste un metodo per l'adozione di una funzionalità "Ricordami" che non riguarda i cookie? Curioso poiché ci sono evidenti difetti di sicurezza nella memorizzazione dei cookie di autenticazione. Non che non ci siano rischi per la sicurezza in quasi tutto.

2) Poiché non sto lavorando con una banca o con informazioni "altamente sensibili", è necessario richiedere agli utenti di immettere le proprie password per le aree più "di alto profilo"? Sembra che ricordare un login sarebbe uno spreco se solo chiedessimo loro di effettuare il login in ogni caso due minuti dopo.

3) Qual è il metodo migliore in assoluto per l'archiviazione di un cookie di autenticazione (a parte "non del tutto")? Al momento ho codificato quell'area per impostare un singolo token nel cookie (hash usando time(), il loro user agent, remote_addr e un salt-sha256). Quando l'utente torna, controlla la tabella "sessioni" per il token, quindi associa IP a IP per registrarli. Se il token è presente ma l'IP non corrisponde, disattiva automaticamente il cookie e chiede loro di accedere come se non ne avessero uno

Grazie ancora a tutti.

+0

Si dovrebbe ri-utilizzare un framework di autenticazione esistente quando possibile, perché, in realtà, è complesso. Ad esempio, dai un'occhiata a https://github.com/delight-im/PHP-Auth. Avrai bisogno di un po 'di archiviazione persistente sul lato client per ciò che stai cercando di fare - e quindi i cookie sono la scelta ideale. – caw

risposta

6
  1. In sostanza, n. Richiede una sorta di archiviazione sul lato client; non hai modo di sapere chi è un client senza un cookie (o simile, come l'archiviazione lato client HTML 5).

  2. Questo è un trade-off che devi decidere. Il minimo, la vecchia password o qualche altra forma di conferma (e-mail?) Dovrebbero essere richiesti per cambiarlo in uno nuovo.

  3. Non è possibile proteggere in modo assoluto il furto di cookie e la successiva impersonificazione, a meno che non vengano crittografate tutte le comunicazioni. Questo è l'unico metodo sicuro. Certo, associare un IP, un user-agent, ecc. Al cookie potrebbe essere utile, ma è più facile e molto più sicuro affidarsi alla crittografia. (ho frainteso il punto qui - ciò che è importante nel valore del cookie è che è casuale, in modo che si dovrebbe cambiare il metodo generazionale per essere meno prevedibile)

+0

1) Non pensavo così, ma pensavo che valesse la pena di chiedere comunque possibili idee radicali. ;) 2) Avrei sicuramente bisogno della vecchia password per aggiornare qualsiasi informazione come e-mail, nome utente, password, ecc. Principalmente intendevo per cose come l'acquisto di qualsiasi cosa (è un gameite in modo che gli utenti abbiano opzioni come questa), scambiandosi con altri utenti, quel genere di cose. 3) In realtà mi riferivo al sistema di archiviazione/controllo (il modo in cui funziona per la mia descrizione iniziale) in contrasto con la crittografia o senza crittografia. – Zydeco

+0

@Zyd Ah pensavo avessi detto che accettavi solo un determinato cookie se l'IP, l'user-agent, ecc. Corrispondevano. L'unico requisito del cookie è che è abbastanza casuale, quindi non può essere indovinato. Il metodo che stai usando non è molto buono perché è un po 'prevedibile, anche se il sale, se abbastanza grande, potrebbe compensare questo. In ogni caso, dovresti cambiarlo. – Artefacto

+0

Per essere più chiari: usa HTTPS e imposta il flag 'secure' sui cookie, che evita la maggior parte delle forme di hijack dei cookie (a meno che la macchina dell'utente non sia compromessa). – deceze