Bob usa un'applicazione web per ottenere qualcosa. E:
- Il suo browser è a dieta, quindi non supporta i cookie .
- L'applicazione web è popolare, si occupa di molti utenti in un dato momento e deve essere scalabile bene. Fintanto che mantenere la sessione imporrebbe un limite al numero di connessioni simultanee e, ovviamente, comporterà una riduzione delle prestazioni non trascurabile , potremmo voler avere un sistema senza sessione :)
Alcune note importanti:
- abbiamo la sicurezza dei trasporti ( HTTPS e i suoi migliori amici);
- dietro le quinte, l'applicazione web delega molte operazioni a servizi esterni , per conto dell'utente corrente (quei sistemi riconoscono Bob come uno dei loro utenti) - questo significa che dobbiamo inoltrare loro le credenziali di Bob .
Ora, come autentichiamo Bob (su ogni richiesta)? Quale sarebbe un modo ragionevole per implementare una cosa del genere?
- giocare a tennis con le credenziali tramite campi nascosti da modulo HTML ... la pallina contiene le credenziali ( username e password ) e le due racchette sono rispettivamente il browser e l'applicazione web. In altre parole, possiamo trasportare i dati avanti e indietro tramite i campi del modulo anziché tramite i cookie. Ad ogni richiesta web, il browser pubblica le credenziali. Tuttavia, nel caso di un'applicazione a pagina singola , potrebbe sembrare di giocare a squash contro un muro di gomma, invece di giocare a tennis , poiché il modulo web contenente le credenziali potrebbe essere mantenuto in vita per l'intera vita della pagina web (e il server sarà configurato per non restituire le credenziali).
- memorizzare il nome utente e la password nel contesto della pagina - variabili JavaScript ecc. Pagina singola richiesta qui, IMHO.
- autenticazione basata su token crittografati. In questo caso, l'azione di accesso comporterebbe la generazione di un token di sicurezza crittografato (nome utente + password + qualcos'altro). Questo token verrà restituito al client e le richieste imminenti saranno accompagnate dal token. Questo ha senso? Abbiamo già HTTPS ...
- altri...
- ultima risorsa: non farlo, memorizza le credenziali nella sessione! La sessione è buona. Con o senza biscotti.
Ti viene in mente qualche problema di sicurezza / web in merito a qualche idea precedentemente descritta? Per esempio,
- timeout : possiamo mantenere un timestamp , insieme alle credenziali (time-stamp = l'ora in cui Bob ha inserito le sue credenziali). Ad esempio, quando NOW - timestamp> soglia , potremmo rifiutare la richiesta.
- Protezione cross-site scripting : non dovrebbe essere diverso in alcun modo, giusto?
Grazie mille per aver dedicato del tempo alla lettura di questo :)