Condivisione sicura della sessione tra sottodomini

2

Quindi ho un servizio web che deve essere suddiviso in più sottodomini.

Quindi app1.xyz.com e app2.xyz.com.

Poiché Safari (l'ultima volta che ho controllato) non consente la condivisione dei cookie in sottodomini come altri browser, ho bisogno di un modo efficace per mantenere l'accesso di un utente mentre si spostano tra i diversi sottodomini, sullo stesso sessione.

A prima vista questo dovrebbe essere facile come inviare session_id in un URL su https.

Ma è abbastanza buono?

Sia un cookie che un URL vengono inviati su https, quindi c'è lo stesso rischio di decifrare il certificato SSL tramite lo snooping.

C'è qualcos'altro riguardo all'invio di session_id nell'URL che potrebbe essere un problema?

Esiste un modo migliore, che non si limiti alle cose di ingegneria. Usare oAuth mi sembra eccessivo, ma forse mi sbaglio?

    
posta Kile 18.06.2015 - 22:15
fonte

1 risposta

3

Hai frainteso il problema dei cookie per Safari / Chrome, credo. Entrambi implementano correttamente l'RFC, mentre Firefox / IE sono stati più rilassati in passato.

Le normali regole sono:

  • L'impostazione di un cookie per xyz.com non consente ai sottodomini di leggerlo.
  • L'impostazione di un cookie per .xyz.com consente a tutti i sottodomini di leggerlo.
  • L'impostazione di un cookie per app1.xyz.com consente solo al sottodominio app1 di leggerlo, ma non di altri sottodomini.

Alcuni browser piegano leggermente queste regole e invece consentono ai cookie senza il prefisso . nel loro dominio di essere letti dai sottodomini in ogni caso, indipendentemente dal fatto che la RFC dica diversamente. Se ricordo bene, IE / FF lo faceva, ma penso che siano entrati più in linea nelle versioni recenti.

On the face of it this should be an easy as sending the session_id in a the URL over https. But is this good enough? Both a cookie and a URL are sent over https so there is the same risk from decrypting the SSL certificate by snooping. Is there anything else about sending the session_id in the URL that may be a issue?

Non dovresti mai inserire identificativi di sessione nell'URL. Ci sono un sacco di motivi per questo:

  • Sono visibili sullo schermo, quindi sono suscettibili alla contraffazione o dispersione tramite screenshot condivisi.
  • Vengono salvati, in modo non sicuro, nella cronologia del browser. Questo potrebbe essere usato per recuperare i token di sessione in un ambiente desktop multi-utente.
  • I parametri URL di solito vengono registrati da proxy, load balancer e server Web, il che significa che i token di sessione attivi vengono salvati in chiaro nei log.

È semplicemente una cattiva pratica inviarli in URL: se l'hai fatto, e io ho ripetuto la tua app, la contrassegnerei sicuramente come un problema.

Is there a better way, that is not over engineering things. Using oAuth seems like overkill to me, but maybe I am wrong?

Come notato sopra, non penso che il tuo problema originale sia effettivamente un problema, devi solo impostare il dominio corretto per il cookie. Una volta che lo hai fatto, dovresti essere ok.

Inoltre, poiché hai accennato al fatto che stai utilizzando HTTPS per tutto, ti consiglio vivamente di impostare il flag Secure sui tuoi cookie per assicurarti che non possano essere trasmessi su testo in chiaro HTTP. Per evitare gli attacchi sslstrip, dovresti anche esaminare l'impostazione di un'intestazione HTTP Transport Security . Ma questi sono solo suggerimenti aggiuntivi per migliorare la sicurezza a basso costo e non sono direttamente correlati alla tua domanda originale.

    
risposta data 18.06.2015 - 22:41
fonte

Leggi altre domande sui tag