Quali sono i requisiti per un cookie che autentica un utente?

0

Nella mia azienda non possiamo usare la sessione per mantenere gli utenti registrati perché il sito web è diviso tra i backend di PHP e di nodo. Abbiamo pensato di generare l'utente un token dopo che ha effettuato l'accesso e archiviare sia questo token che il suo ID in un cookie in modo che possa essere autenticato su richieste successive. Ma sono davvero perso qui.

Prima è un buon modo? Non possiamo semplicemente archiviare il token se possiamo renderlo unico tra i nostri utenti?

Questi dati mi sembrano fondamentali, è necessario crittografarli? È necessario firmare anche loro?

Qualcuno ha menzionato JWT ma non sono sicuro che sia lo strumento giusto per il lavoro (l'intestazione sarebbe inutile ad es.)

Per riassumere: quale sarebbe il modo più sicuro per archiviare i dati che autenticano un utente in un cookie (non sarà necessariamente inviato su ssl)?

    
posta MatTheCat 04.10.2017 - 00:25
fonte

1 risposta

1

Won't necessarily be sent over SSL

Non esiste un modo sicuro per farlo affatto se questo è il caso. Risolvi questo problema e puoi scegliere tra client based sessions o server side sessions , ma i metodi BOTH richiederanno che i dati di sessione vengano inviati SEMPRE su SSL, altrimenti le sessioni non hanno valore.

Sessioni lato server

In un database comune a entrambi i backend impostare una voce in una tabella con un ID sessione univoco generato, dati di sessione e altri campi di manutenzione che sarebbero utili (tempo dell'ultima attività, ecc.)

La tabella dovrebbe essere simile alla seguente:

id ( text, 40, not null ), data ( jsonb ), lastCom ( timestamp )

Queste sessioni vengono spesso utilizzate perché senza uno speciale codice lato server una sessione può essere terminata da remoto semplicemente eliminando la voce della sessione nel database.

Sessioni lato client

Spesso usato perché con la corretta logica di invalidazione SSL e back-end questi sono GIUSTI quanto sicuri come sessioni lato server. Tuttavia, richiedono la logica back-end per invalidare le sessioni, altrimenti la sessione non è sicura perché non c'è un modo remoto per un amministratore di terminare la sessione. L'utente possiede il cookie, e solo perché ha fallito una volta non significa che non possono riprovare con gli stessi dati ESATTI. Questo perché TUTTA la manutenzione della sessione viene eseguita sul lato utente, quindi è ancora necessaria la convalida del server, ma non significa che sia necessario un database. Significa semplicemente che devi inviare un cookie aggiornato con ogni richiesta (modificando i dati di manutenzione all'interno, come un timestamp di validità)

Entrambi i metodi sono molto sicuri e possono essere implementati in vari modi (JWT, passaporto, ecc. ecc.), ma spetta a te scegliere il metodo che desideri. Ricorda, i dati della sessione devono SEMPRE essere inviati su SSL

    
risposta data 04.10.2017 - 01:45
fonte

Leggi altre domande sui tag