2009-07-02 7 views
47

Guardando i cookie di Gmail è facile vedere cosa viene memorizzato nel cookie "ricordami". Il nome utente/token di accesso singolo. Potrebbe essere implementato in modo diverso nei casi in cui il nome utente è segreto, pure. Ma qualunque cosa ... la cosa non è molto alta sicurezza: rubi il biscotto e sei pronto per andare."Ricordami su questo computer" - Come dovrebbe funzionare?

La mia domanda è sul lato funzionale, tuttavia: quando cancelli i token di accesso? Se un utente accede a senza facendo clic su "Ricordami" su un altro computer, deve invalidare i relativi token di accesso su tutte le macchine? Sto chiedendo come questo sia tradizionalmente implementato, e anche come dovrebbe essere implementato.

+6

Penso che impostare i cookie per la sicurezza sia importante quando si programma qualsiasi applicazione Web - sembra del tutto ragionevole –

+73

Come è correlata questa programmazione NON? – Evan

+14

Definitivamente programmazione correlata. – KingNestor

risposta

15

Uso regolarmente 2 o 3 macchine contemporaneamente e mi "ricordo" su tutte. Se uno di loro disconnettesse gli altri sarebbe molto fastidioso, quindi non lo consiglierei.

Tradizionalmente utilizza un timeout, il cookie scade dopo un certo periodo di tempo (o quando l'utente si disconnette).

Tutto dipende dal modello di sicurezza. Se stai scrivendo un'applicazione aziendale interna in cui ti aspetti che un solo utente si trovi su un solo computer, potresti volere avere restrizioni più restrittive di gmail.

Inoltre, tenere presente la possibilità di Denial of Service: se un'azione su una macchina può forzare la restrizione di un'altra macchina, potrebbe essere utilizzata per impedire a un utente legittimo di riprendere il controllo in determinati scenari.

+3

+1 Stavo per scrivere la stessa risposta, usando regolarmente gli stessi siti web su 4..5 computer e su un telefono cellulare. – laalto

+5

Grazie per quello. Quindi, al logout, potrei uccidere tutte le sessioni persistenti? Non sarebbe fastidioso? Suona bene per me. –

+0

@daniel: uccidere tutte le sessioni persistenti al logout sembra una cosa ragionevole da fare. Altrimenti, dovresti mantenere la persistenza della sessione per computer, così come per utente. In questo modo potrebbe anche funzionare come misura di sicurezza per l'utente consapevole, che potrebbe assicurarsi che stia dando calci a chiunque sia collegato al proprio account. – voyager

3

Il ricordami cookie dovrebbe identificare anche la macchina. Dovrebbe essere correlato alla macchina perché ci sono luoghi in cui si desidera essere ricordati e altri luoghi in cui non si fa (casa vs lavoro).

data

di scadenza è impostato di solito per un periodo di tempo ragionevole (due settimane) o dopo che l'utente ha esplicitamente disconnesso dalla macchina,

+0

Cosa identificherebbe la macchina? Non riesco ad ottenere l'indirizzo Mac, l'agente utente non è univoco e l'indirizzo IP cambia? –

+0

non è possibile identificare in modo univoco la macchina ma è possibile utilizzare le tecniche di approssimazione standard, combinazione di IP/UserAgent per exmaple. E fallire sul sicuro se cambiano, cambiano ed è una macchina diversa (anche quando non lo è) –

+0

Grazie Vinko. Ho solo pensato che forse c'era una chiave del browser magica. Ma se lo fosse, i siti degli hacker lo saprebbero ... Vi voterò anche se non sono d'accordo con l'identificazione basata su IP. –

5

accede da un altro computer non dovrebbe invalidare il login associato con un cookie su un diverso macchina. Tuttavia, se gli utenti eseguono il logsout o "non tu? Accedi qui", questo dovrebbe cancellare il cookie su cui l'utente sta lavorando.

In ogni modo il furto di un cookie può essere reso difficile, insistendo su https e rendendolo non adatto allo scripting.

Aggiungendo "; HttpOnly" all'output dei cookie questo renderà il cookie non disponibile per javascript, ad es.

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Server: Microsoft-IIS/7.0 
Set-Cookie: ASP.NET_SessionId=ig2fac55; path=/; HttpOnly 
X-AspNet-Version: 2.0.50727 
Set-Cookie: user=t=bfabf0b1c1133a822; path=/; HttpOnly 
X-Powered-By: ASP.NET 
Date: Tue, 26 Aug 2008 10:51:08 GMT 
Content-Length: 2838 

si può leggere di più su questo

+3

+1 per cookie httpOnly – jinsungy

+0

Grazie per questo, David.Potete darmi qualche link o qualcosa di cui stiamo parlando con un cookie "non per lo scripting?" –

+0

Modificato come da richiesta. –

0

Quello che vorrei fare è collegare ogni sessione a un indirizzo IP. Se il token di sessione viene inviato da un IP diverso da quello che hai per quello, rifiutalo.

+4

Questo non funzionerebbe per un utente che potenzialmente ottiene un indirizzo IP diverso ogni volta che accendono il loro modem. Inoltre, consentirebbe a qualcuno su una rete aziendale in cui ogni macchina della compagnia arriva a Internet attraverso un singolo server proxy per rubare le credenziali di un altro utente. Gli indirizzi IP non sono assolutamente utilizzabili per identificare un utente, nemmeno attraverso una singola sessione, poiché alcuni ISP potrebbero instradare le richieste attraverso diversi proxy non trasparenti praticamente a caso. – NickFitz

+0

idem NickFitz: su domande SO di questo tipo, le persone rifiutano sempre la sicurezza basata su IP, poiché gli indirizzi IP cambiano per molti utenti. –

+0

"(...) poiché gli indirizzi IP cambiano per * la maggior parte * degli utenti." L'ha fissato per te. – voyager

0

token di accesso dovrebbe essere IP specifico in modo che essi non possono essere facilmente trasferiti tra macchine.

Devono inoltre essere implementati in modo da consentire agli utenti di vedere su quali macchine hanno i token attivi.

I siti che scelgono di uccidere un token una volta che ne viene creato uno nuovo su un altro computer - fanno la scelta che i loro utenti non accedano al loro servizio su più computer - o se lo fanno - che il loro utilizzo giustifica il fatto di farli nuovamente accedere .

La politica che si impiega dipende in realtà dai dati che si stanno tenendo e dalle esigenze dell'utente.