Penso che le altre risposte non riescano ad affrontare l'attacco principale che viene protetto da qui, che non è forgiando il cookie, ma manomissione con esso, o > ispezionarlo .
Se si invia un cookie a un browser che dice "current_user = tom", l'utente può restituire un cookie alternativo che dice "current_user = dave". Se non hai nulla per convalidare il cookie, la tua applicazione supporrà che sia loggato come "dave".
Questo potrebbe essere mitigato da firmare il cookie utilizzando una chiave segreta - il cookie manomesso non avrebbe la firma corretta, quindi verrebbe rifiutato.
Tuttavia, potrebbe esserci ancora un problema: se parte dello stato che vuoi memorizzare è secret . Ad esempio, potresti voler memorizzare il prezzo di costo e il markup dei prodotti nel carrello dell'utente; chiaramente un cookie in chiaro che l'utente può leggere non è appropriato qui.
Questo ti lascia con due soluzioni:
-
Encrypt il contenuto del cookie, in modo che non possa essere né letto né modificato senza conoscere la chiave privata.
- Archivia i dati effettivi localmente (ad esempio in un disco o in un archivio di memoria) e invia solo un identificatore nel cookie. Questo è generalmente noto come "dati di sessione".
Le sessioni sono relativamente facili da implementare e sono sicure contro questi attacchi particolari. Tuttavia, impongono oneri all'infrastruttura di back-end, perché i server Web / delle applicazioni devono essere in grado di scrivere e leggere i dati; questo può essere complicato in configurazioni di bilanciamento del carico complesse, per esempio. Pertanto, la crittografia di una piccola quantità di dati direttamente nel cookie può essere un'alternativa ragionevole, poiché ora gli unici dati che devono essere condivisi tra i server delle applicazioni è la chiave privata.
Nota che nessuno di questi protegge direttamente contro altri attacchi, come il dirottamento, in cui un utente malintenzionato clona semplicemente i cookie da una sessione autentica. I token di sessione possono anche essere vulnerabili a un attacco correlato chiamato "fissazione di sessione", in cui un utente malintenzionato sceglie l'identificativo prima che un utente reale si colleghi e può quindi creare cookie identici a loro; questo non sarebbe possibile con un cookie crittografato, ma sono sicuro che ci sono altri attacchi esclusivi a sua volta.