Newsgroup: it.comp.java
Titolo: Gestione sessioni e autenticazione

Salve a tutti, sto sviluppando una soluzione piuttosto complessa. In 
breve si basa su alcuni moduli JavaEE che espongono delle funzionalità 
tramite REST (RESTeasy per la precisione) e due tipi di interfacce web 
(ovvero siti web).
I servizi devono essere dietro autenticazione e profilazione degli 
utenti, l'autenticazione avviene tramite le due interfacce web. Una può 
essere sviluppata tramite jsp (e quindi tramite le session e gli ejb me 
la cavo) ma l'altra "famiglia" deve essere in html puro, o comunque deve 
poter stare fuori da un application server. Come fare? mi trasmetto una 
"session id" nell'url delle richieste? Cosa mi consigliate?


Ho pensato di fare cosi:
il generico sito invia tramite ajax ad un web service la coppia username 
e password. questo memorizza nel db interno il login e una sessionId, 
che ritorna al client.
Dopodichè, ogni volta che accedo ad un web service, gli appendo la 
sessionid come parametro nella url. Ci vede qualcosa di male?

 sessionid come parametro nella url. Ci vede qualcosa di male?
E' (quasi) esattamente il meccanismo che utilizza Tomcat quando vengono 
disabilitati i cookie :) Il suo principale difetto è che se il session 
id viene intercettato chiunque può impossessarsi della sessione, vedi 
"Session hijacking"
Scusa ma a questo punto non mi sembra più tanto un "html puro", 
piuttosto un client di tipo javascript, giusto? In questo caso un altro 
rischio di sicurezza deriva dal fatto che parte della logica applicativa 
è direttamente sul client.
Comunque, se l'applicazione va su intranet è un problema minore, nel 
senso che se qualcuno si mette a fare il piccolo hacker viene licenziato 
direttamente!
-- 
Dimitri De Franciscis
Phone:  
(+39) 3401570778
Website: 
http://www.megadix.it/


Si, non è html puro ma praticamente una web application scritta in 
javascript (lo chiamo html puro perchè non c'è nulla server-side, ma 
sbaglio io). L'applicazione andrà su internet, ma per difendersi dal 
session hijacking non potrei internamente usare la session id con una 
cosa tipo sessionIdInterna = sessionId + ip per fare le verifiche di 
autenticazione?

 autenticazione?
Eh già ma quello che tu definisci "internamente" sta all'interno del 
browser -> fuori dal tuo server (e dal tuo controllo!)
Il problema grosso non è l'utente "medio", che per quanto si senta 
hacker comunque userebbe il proprio session id, quanto piuttosto il 
fatto che le chiamate HTTP sono in chiaro e chiunque le può sniffare e 
replicare.
Aggiungere l'indirizzo IP potrebbe aiutare a dire il vero, ma lo trovo 
un po' macchinoso e di conseguenza poco affidabile... in questo senso: 
se implementi un meccanismo del genere ti devi assicurare che:
- funzioni *sempre*;
- *tutte* le chiamate dell'applicazione lo gestiscano correttamente;
- sia scalabile, ad es. per tenere traccia di utenti con più sessioni, 
magari su più browser/device, ecc.
- non si mescolino le sessioni, ad esempio se più client dalla stessa 
rete si collegano insieme hanno tutti lo stesso IP
Spero di non averti confuso le idee... purtroppo sicurezza e facilità 
sono in faida perenne una contro l'altra



Si, purtroppo lo so...non mi hai confuso affatto le idee, anzi! grazie 
dei consigli!