I cookie sono principalmente attraenti grazie alla capacità di memorizzare valori longevi e alla convenienza di non dover inviare esplicitamente l'identificativo di sessione ad ogni richiesta (perché il browser ). Puoi anche nascondere facilmente i valori dei cookie dagli script, mentre la stessa protezione su un campo modulo o una variabile richiede una soluzione più dettagliata.
Tuttavia, dal momento che probabilmente creerai la tua libreria di gestione delle sessioni, dovrai essere a conoscenza di alcune cose, probabilmente più di quelle che ho elencato qui, ma come inizio, hai bisogno per proteggersi da:
- ID di sessione prevedibili che possono consentire agli utenti di "trovare" e dirottare un altro
- Consentire agli utenti di fornire il proprio ID sessione; solo gli ID generati dal server dovrebbero essere riconosciuti
- Consentire agli script di vedere l'ID di sessione
Le prime due preoccupazioni si applicano a qualsiasi tipo di sessione. Sono notabili in gran parte perché probabilmente farai rotolare del codice di gestione delle sessioni personalizzato. La terza preoccupazione si applica molto di più-così , ma non esclusivamente, a sessioni di tipo cookieless, perché le intestazioni dei cookie possono essere contrassegnate come collegamento cookie.
Per impedire agli script di visualizzare un valore, devi chiudere l'ID con una certa cura:
var SessionScope = (function() {
var o = {};
// outside scripts can't see this:
var session_id = '1234';
// these methods can see session_id and use it to channel/sign requests
o.get = function(url, data) { };
o.post = function(url, data) { };
o.whateverelse = function() { };
return o;
})();
Per essere chiari, è idealmente necessario assicurarsi che SessionScope
(o qualsiasi altra cosa) sia costruito in modo tale da non avere nemmeno legami con un costruttore che potrebbe essere toString()
'd.
Ora capisco il rischio che gli script vedano gli ID della sessione in abbastanza bassi nella maggior parte dei casi . Diventa più problematico quando si visualizzano i dati inviati da un utente a un altro utente o quando si incorporano librerie di terze parti non affidabili. Detto questo, se segui questa strada, è perfettamente fattibile per aggiungere la protezione aggiuntiva, quindi dovresti.
E ancora una volta, ti consigliamo di considerare che, se ti allontani dalla memorizzazione di ID di sessione nei cookie, probabilmente perderai o impedirai la possibilità di ricollegarti alla sessione senza chiedere all'utente di "trovarla" in alcuni modo.
Con tutto ciò detto, potresti non voler affatto "sessioni" distinte. La soluzione migliore potrebbe essere solo una singola sessione. Se il tuo utente ha effettuato l'accesso utilizzando le stesse credenziali e permessi in ogni scheda, e devi monitorare i dati relativi a una finestra, una scheda o una vista su entrambi i client e server , probabilmente vuoi solo una collezione nella sessione. Ma in quel tipo di soluzione, gli identificatori di vista / tab non sono solitamente necessari perché la vista è solo chiede cose rilevanti per se stesso.
Il cross-talk tra le schede e le viste viene evitato da una combinazione di che tiene le cose fuori dalla sessione "globale" che non appartengono a questo e che richiedono solo le cose che ti servono.
Tuttavia, se ciò non è fattibile per qualche motivo, potresti prendere in considerazione l'aggiunta di una raccolta di view
collection al tuo modello di sessione e il passaggio di una percentuale di viewid
. In questo caso, non dovresti preoccuparti di tutti i problemi di sicurezza relativi alla gestione e alla protezione delle chiavi di sessione (supponendo che tu stia utilizzando correttamente un sistema di sessione strong). Le chiavi di visualizzazione sarebbero rilevanti solo per la sessione, quindi una percentuale non rilevata diviewid
non è pertinente per nessun altro e quindi non rappresenta una minaccia significativa.