Ho un oggetto utente che contiene informazioni sull'utente (nome utente, ip, paese, nome, email ... ma NON password). Devo memorizzare solo il nome utente nel cookie e quindi recuperare tutte le informazioni dal DB al caricamento della pagina, o semplicemente memorizzare l'intero oggetto Utente nel cookie?È sicuro memorizzare l'oggetto utente in un cookie?
risposta
Non è possibile fidarsi di alcuna informazione memorizzata in un cookie, in quanto l'utente può manipolarlo a suo piacimento.
Suggerisco di utilizzare un PHP session per memorizzare l'oggetto. In questo modo, l'utente finale ha solo un ID di sessione memorizzato in un cookie, con i dati reali sul tuo server.
La sessione scadrà alla fine, anche se ... costringendo l'utente ad accedere nuovamente.
Modifica: Whoops, dovrei sottolineare che le sessioni sono davvero facili da usare. Basta fare quanto segue:
session_start(); // This MUST be at the very top of every page that accesses the session
// Store something in the session with the key 'something'
$_SESSION['something'] = "Hi, I'm a session!";
// Retrieve 'something' from the session
$myString = $_SESSION['something'];
In questo caso, direi memorizzare l'id utente nel cookie e il gioco è fatto. Quindi, al primo caricamento della pagina, si carica tutto il necessario dal database e si continua a utilizzare una sessione finché l'utente rimane sulla pagina.
Per verificare se la pagina viene caricata la prima volta, ho appena impostato un bool nella sessione se è stato caricato. Se il bool non esiste, l'utente lo carica inizialmente.
Probabilmente ci sono modi migliori per farlo, ma funziona in modo semplice e facile. :)
La regola standard di "mai fidarsi dei dati pubblicati" si applica anche ai cookie. Suggerisco di memorizzare solo l'ID utente e un hash dell'ID e qualche segreto noto solo al server.
Memorizza solo un ID di sessione! Dati mai significativi come l'ID utente. Immagina di avere un sito con 10.000 utenti. È probabile che tu abbia almeno un utente chiamato superman e batman - se hai strappato un nome utente in un cookie per accedere alle informazioni della sessione - è potenzialmente possibile per me manipolare quel cookie per modificare le informazioni memorizzate dal mio nome utente a batman e ottenere l'accesso al conto di Batman se la sua sessione è ancora viva. Se memorizzi una sorta di ID di sessione generato in modo casuale, è praticamente impossibile per me capire un numero di sessione che funzioni per un altro utente per dirottare quella sessione.
È possibile fidarsi delle informazioni nel cookie se si utilizza qualcosa come Hmac. Gli utenti potrebbero ancora vedere i dati, ma si saprebbe se li hanno manomessi (ad esempio, cambiando il loro nome utente in quello di qualcun altro nel tentativo di vedere i dati di un altro utente). Se non vuoi che vedano i dati, potresti anche crittografare simeticricamente i dati che stai inviando. Ovviamente c'è un sovraccarico della CPU per tutto questo, e una larghezza di banda in testa più roba ci si stipa lì, ma è del tutto legittimo fare quello che stai chiedendo.
@ ApoY2k - Penso che il voto negativo (non ero io :) era perché non si può presumere che il nome utente che viene passato da un cookie sia l'effettivo nome utente che hai scritto sul cookie. Questo è il motivo per cui hanno suggerito di usare sessionID. Usando il sessionID puoi ottenere il nome utente e come ha detto è valido solo per 20 minuti o qualsiasi cosa tu abbia impostato per il timeout della sessione. SessionID non rivela alcun dato privato. Ho avuto il tuo stesso pensiero prima di trovare questo post.
- 1. iOS: è sicuro memorizzare informazioni utente sensibili in [NSUserDefaults standardUserDefaults]?
- 2. Memorizzare un'immagine in un cookie
- 3. Come memorizzare un array in un cookie?
- 4. Memorizzare un array multidimensionale in un cookie?
- 5. Quanti dati posso memorizzare in un cookie
- 6. Come memorizzare la stringa in un cookie e recuperarla
- 7. servlet set cookie sicuro?
- 8. È app.config archiviare un luogo sicuro per memorizzare le password?
- 9. Ruoli utente - perché non memorizzare in sessione?
- 10. Come leggere un cookie sicuro utilizzando JavaScript
- 11. Come memorizzare un array in un cookie JavaScript?
- 12. È comune memorizzare una password utente in una sessione PHP?
- 13. Come memorizzare un HashTable nelle impostazioni utente?
- 14. Qual è il modo corretto e sicuro per mantenere un utente connesso? biscotti? sessione? PHP && MYSQL
- 15. Cookie di sessione sicuro Expressj
- 16. Resta connesso alle best practice: come fa un nome utente nel cookie a renderlo più sicuro?
- 17. È meglio memorizzare i dati dell'utente in un database piuttosto che nei cookie?
- 18. Scadenza cookie sicura Tornado (aka cookie di sessione sicuro)
- 19. Quanto è sicuro memorizzare la sessione con Redis?
- 20. Quanto è sicuro memorizzare la password con Git?
- 21. È sicuro creare cookie prima che il documento sia pronto?
- 22. SessionAuthenticationModule Cookie Handler che non crea cookie HttpOnly sicuro
- 23. È possibile memorizzare javascript in un database?
- 24. Applicazione web iPhone, non memorizzare cookie
- 25. Dove memorizzare l'ID utente in jwt
- 26. Come funziona il flag "sicuro" dei cookie?
- 27. È sicuro memorizzare gli ID dei fusi orari in un database o possono cambiare?
- 28. Come modificare l'indirizzo email di un utente in modo "sicuro"?
- 29. Dati utente archivio ASP.Net in cookie di autenticazione
- 30. Memorizzare in modo sicuro token Oauth nel file
+1 per "impossibile fidarsi dei dati nei cookie". Per ampliare i point-cookies di R. Bemrose dovrebbe contenere un puntatore ai dati nel tuo sistema, niente di più. In questo modo, di per sé, i dati dei cookie non hanno senso. –
Inoltre, il passaggio di enormi quantità di dati in un cookie può avere un effetto negativo sui tempi di caricamento della pagina poiché il cookie viene trasmesso ad ogni richiesta. – Yacoby
Oppure, potrebbe avere un effetto positivo sui tempi di caricamento della pagina, in quanto consente di eliminare un round-trip del database. Lo saprai solo misurando. :) – Thom