Cookie accessibili solo a Javascript

Formica

Nuovo Utente
24 Apr 2012
6
0
1
Volevo realizzare una tecnica di login sicura. L'idea era scambiare con un canale sicuro una password tra server e client. Dopodiché questa non viene mai più comunicata, ma usata per criptare e decriptare i messaggi che server e client si scambiano. Così, se qualcuno intercetta qualcosa, non ha la chiave per capire nulla.

Questo, tra le tante sistemazioni, richiede che Javascript salvi delle informazioni sul browser e non le invii mai. L'ideale sarebbe un cookie che non viene mai inviato. Del resto i cookie si possono leggere solo dal dominio impostato e solo dal percorso impostato. Un altro sito non può leggere i cookie di altri siti, a meno che questi non vengono creati per quel dominio. Quindi mi sembrano sicuri (trattando gli input che giungono dal browser tramite POST GET e COOKIE in modo da renderli innocui per MySQL PHP e anche HTML) e comunque salverei dati che cambiano ad ogni sessione, quindi mai del tutto compromettenti.

Avevo creato un cookie con JS per il percorso /g8hd32jn (sequenza alfanumerica casuale) che non viene mai usato e quindi mai inviato. Se proprio viene visitato, allora viene chiusa subito la sessione ed eventuali dati inviati al server (ed eventualmente intercettati) sarannno definitivamente cambiati e quindi resi inutili. Però, nel momento in cui volevo recuperare con JS le informazioni salvate in quel cookie, il cookie risultava inesistente, non accessibile. Questo perché è disponibile solo se sono nella pagina /g8hd32jn, ma io lo voglio disponibile in tutte le pagine /, solo che così il browser lo invia sempre al server, e non voglio.

Ho provato dunque ad usare il parametro 'secure' che invia il cookie al server solo con connessione HTTPS, che io non uso e quindi non dovrebbe mai essere inviato. Così è, però nemmeno Javascript può più avere accesso ai cookie così creati: sconforto.

Ho pensato infine che, se non esiste la possibilità di avere cookie accessibili solo a Javascript, potevo salvare un piccolo file temporaneo. Però questa operazione è problematica perché Explorer ha un ActiveX per farlo facilmente ma il sistema cambia da browser a browser e ancora più problematico è in Linux e Mac. Ho trovato FireBreath che tra le varie cose concede di salvare file in tutti i browser e s.o. però, far scaricare oltre 1 MB di roba (compressa quindi sicuramente abbastanza di più) all'utente che visita il sito, solo per salvare una piccola informazione che deve stare solo sul client e mai essere inviata, non ha senso...

Non è proprio possibile avere cookie accessibili solo a Javascript? non si è mai avvertita questa esigenza? Spero di trovare una soluzione. Vi ringrazio per ogni consiglio!
 
Ultima modifica:

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Hai mai pensato alla possibilità che un utente possa avere il js disabilitato? Basare tutto sul client non conviene
 

Formica

Nuovo Utente
24 Apr 2012
6
0
1
Nessuno tiene JS disabilitato, dovrebbe rinunciare a innumerevoli funzioni. Inoltre è un eccesso di sicurezza, perché non rappresenta gravi pericoli JS.

Ho postato questo problema e poco dopo cercando, un tipo in inglese espone il mio stesso problema, uguale uguale. La risposta è che HTML5 ha introdotto il localstorage (anche global e di sessione) che forse rimpiazzerà col tempo i cookie. Potete leggere qui: http://geeknizer.com/html-5-client-storage.

Il funzionamento è semplice: "if (localStorage)" risulta vero se il browser supporta la caratteristica e falso altrimenti. "localStorage.setItem("nome_chiave", "valore");" in questo modo salviamo qualcosa di analogo ad un cookie che resterà solo sul browser e non verrà mai inviato e sarà anche persistente, ovvero resta anche se si chiude il browser, a meno che non lo eliminiamo con "void removeItem("nome_chiave");" oppure eliminiamo tutto con "localStorage.clear();".

Questi valori poi si leggono così: "localStorage.setItem("nome_chiave", "valore");", quello che ora voglio chiarire è se il sito che crea questi valori è l'unico che poi può leggerli e cancellarli, o no. Spero che un sito non veda i valori locali di tutti gli altri siti, ma non penso sia così, sarebbe assurdo per la sicurezza. Verificherò: "localStorage.length" mi dice quanti valori locali sono visibili sul mio browser, se non ne creo nessuno dovrebbe dirmi zero. Andrò a visitare anche un sito che usa questi localStorage per vedere se dice sempre zero quando il comando è eseguito da localhost (ho installato un server locale).
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Mi sono documentato un po sul localstorage dell'html5, ho settato una chiave su un editor online e l'ho provata a ristamparla su un mio sito e il valore era nullo, quindi penso proprio che saranno validi solo per il sito dove vengono settati per fortuna
 
Ultima modifica:

Formica

Nuovo Utente
24 Apr 2012
6
0
1
[...] Andrò a visitare anche un sito che usa questi localStorage per vedere se dice sempre zero quando il comando è eseguito da localhost (ho installato un server locale).
Vi aggiorno! Oltre ad aver provato personalmente che gli unici valori locali che leggo sono quelli che creo all'interno del mio sito. Qui ho trovato ulteriori spiegazioni. In particolare vengono poste 5 questioni problematiche relative al LocalStorage di HTML5, che per me non sono problematiche:
  1. Non solo da sito a sito questi valori non sono visibili e ognuno vede quelli che ha creato, ma anche lo stesso sito se usa http o https è considerato un "luogo diverso" e quel che si crea sotto https non lo si vede in http, anche se è lo stesso sito. Più che un problema, mi sembra una scelta sicura che hanno fatto.
  2. Relativamente a SessionStorage (che non mi interessa ora) se il browser crasha e ripristina la sessione corrente, uno si ritrova i valori di SessionStorage che sopravvivono a questo evento. Poco male... ma tanto non lo uso.
  3. Se utilizziamo LocalStorage in modalità incognita, quando si chiude, tutto viene perso e non resta nulla. Doveva essere altrimenti?? Meglio.
  4. WebStorage ha esteso i limiti dei cookie, ora si può salvare fino a 5MB, io devo salvare solo una stringa, o un paio al massimo, di 40 caratteri...
  5. Con vecchi browser possono nascere problemi, ma c'è la possibilità di implementare questa caratteristica. Per me gli utenti devono avere l'ultima versione aggiornata del browser, è anche una questione di sicurezza, oltre che di funzioni.

Spero di essere stato utile anche per altri che avranno necessità simili alle mie!

P.S.
Nefyt leggo ora il tuo messaggio, ho lasciato la scheda aperta e non lo vedevo ancora. Grazie per la tua prova, è una conferma in più :)
 
Ultima modifica: