33 messaggi dal 04 aprile 2005
Ciao ragazzi, allora questo post è inerente le aree di login e l'utilizzo di session o cookies. Dunque fra le 2 non è che ci sia poi tutta questa differenza, perchè anche le sessions si basano su un cookies non persistente (a dire il vero ho provato ed in ASP se non si definisce la scadenza del cookies questo non appare sul client, ad esempio nol lo trovo nella caretlla tempray internet files o cookies di windows) e quindi se il tizio che si vuole loggare disabilita i cookies può dire addio alla login. Certo le session possono essere anche passate in GET o tramite form nascosto, ma attenzione questi 2 casi sono i più facili da by passare con quelli che vengono definiti session fixation attacks. In uno di questi attacchi il cracker o l'hacker vi inducono a cadere nella trappola di una session ID già aperta sul server e se voi ci finite dentro, quando vi loggate, aprite l'accesso ai dati anche all'intruso, perchè tutte le vostre variabili di sessione diventano pure le sue.

Ora di fronte a tutto questo mi sembra che l'utilizzo di cookies non persistenti, nei quali andiamo a memorizzare i dati dell'utente cripatati e magari il numero della sua sessione sia la via più tosta, perchè anche se finiamo in una session ID trappola a questo punto chi attacca non ha comunque i cookies di autenticazione.

Voi che ne pensate? Io ho lanciato il pallino, dai rispondetemi che ha furia di studiare problemi di sicurezza etc. sto fondendo la cabesa!

session fixation attacks sono qui: http://www.acros.si/papers/session_fixation.pdf
33 messaggi dal 04 aprile 2005
esempio pratico:

quando l'utente ha inserito le sue credenziali sul form controllate se è tutto ok e create questo cookies:

response.cookies("mio")("1") = "NomeUtente"
response.cookies("mio")("2") = session.sessionId

bene questo è un cookie non persistente morirà ogni volta che chiudete il browser.

Poi fatevi una paginetta e scrivete:

if request.cookies("mio") <> "" then
response.write ("devi eseguire il sign out prima di loggarti di nuovo")
else
response.write("Nome" & request.cookies("mio")("1") & "<br>")
response.write("IDsessione" & request.cookies("mio")("2") & "<br>")
response.write("IDsessione reale" & session.sessionID)
End If

Bene ora fate una prova creado il cookie, chiudendo e riamprendo il browser e guardando a che succede. Se tutto è ok avete appena incapsulato l'Id di sessione dentro un cookie che muore tutte le volte che la sessione viene chiusa. Ora nel caso di un session fixation attack, tutto è comunque incapsulato dentro un cookie e quindi le variabili di sessione che in genere si usano (stile session("User") = "nomeuser") non possono essere usate contro di voi.

Alla fine fate un altra prova, e fissate la data di scadenza del cookie riscrivendo le righe della prima pagina così:

response.cookies("mio")("1") = "NomeUtente"
response.cookies("mio")("2") = session.sessionId
response.cookies("mio").expires = DateAdd ("h", 10, Now)

e modificate la seconda così

response.write("Nome" & request.cookies("mio")("1") & "<br>")
response.write("IDsessione" & request.cookies("mio")("2") & "<br>")
response.write("IDsessionereale" & session.sessionID)

chiudete e riaprite il browser, fate partire la prima pagina e poi andate sulla seconda, fatelo più volte controllando il numero della sessione stampata. Questo non dovrebbe mai variare perchè il cookie è persistente. Mentre la sessione in realtà varia.

Bene fateci un pesierino e ditemi se ho scritto una boiata o a se qualcuno interessa. Secondo me gestendo così un login, si rende un pò più difficile la vita di quello che gli inglesi chiamano attacker.
63 messaggi dal 08 febbraio 2002
A me sembre tutto corretto.
Quindi secondo te il modo migliore per logare un utente è inserire in un cookies non persistente un valore da poter riconoscere alle visite successive, esempio:
response.cookies("mio")("log") = "ok"

Oppure come proponevi di farlo?
Ciao.
33 messaggi dal 04 aprile 2005
Ciao MrDog, allora l'idea sarebbe questa, mettere in un cookie non persistente (o persistente, è da valutare la cosa) nome e sessionid dell'utente alla login tramite form. Teoricamente anche se uno si impadronisce furtivamente della tua sessione lui non vede tutte le variabili perchè sono incapsulate dentro al cookie.

Poi per ogni pagina protetta controlli la corrispondenza del cookie con il db e lo fai entrare o meno, questo perchè fra la login e l'accesso alle pagine protette può succedere di tutto.

Se l'ID session nel cookie non corrisponde con il session ID attuale vuole dire che la sessione utente è scaduta per qualche motivo e l'utente si deve riloggare.

A dir la verità si può fare anche con un cookie persistente, anzi forse è meglio, dici che il cookie muore dopo 2 ore dalla nacita per esempio, se nel mentre la sessioneid scade dici all'utente di riloggarsi e così se muore il cookie.

Con un cookie persistente e la session incapsulata limiti un possibile attacco a non più del tempo per il quale il cookie è valido e inoltre se uno ruba un cookie quello non sarà mai valido perchè la sessionID è unica. Bhe a dir la verità uno dovrebbe inbrogliare facendo cadere lo user in una session già aperta, poi andarli pure ad intercettare il cookie.

Bisogna pensarci e se mi dai una mano con qualche parere è meglio, e magari se c'è qualche esperto di sicurezza che vuole rispondere è una bella cosa, anche se mi smonta le teorie è uguale, ma è bello discutere secondo me!
Modificato da Orsobruno il 04 aprile 2005 22.17 -
63 messaggi dal 08 febbraio 2002
Per maggiore sicurezza si potrebbe inserire anche la password oltre che il nome utente e la sessionID.
Io utilizzerei i cookies non persistenti, per quanto ne so non danno problemi con le restrizioni sulla privacy di explorer, o mi sbaglio.
Ciao, Matteo.
33 messaggi dal 04 aprile 2005
Ciao Marco, allora io preferisco controllare se l'utente ha disabilitato i cookies, tanto se li ha disabilitati che tu utilizzi sessions o cookies non persistenti sei sempre fregato. L'utilizzo di un cookie non peristente dovrebbe garantire queste cose:
1) Migliore isolamento con l'esterno rispetto le sessioni (per dire se uno crea una sessione fittizia e vi fa finire nella sua trappola lui sul suo browser non ha cmq i cookies e quindi non dovrebbe accedere sotto falsa identità).
2) Non gravano sul server come invece fanno le sessioni
3) Garantiscono cmq una certa privacy perchè non vengono salvati sull'hard disk dell'utente
4) Se un client decide di cancellare tutti i cookie, almeno con certezza su IE, il cookie non persistente continuerà ad esistere.
5) Se dentro ci incapsuli la sessionId puoi controllare pure che la sessione utente sia cambiata, ad esempio può succedere per un lungo tempo di inattività del client(20 min), la chiusura del browser o per una caduta del server.
Secondo me questo è un metodo valido, ma a me sembra che o io e te siamo gli unici pazzi che pensano a queste soluzioni e si danno risposta, bho o dico cose scontate o forse dico delle assurde porcherie. O forse c'è in giro una confusione assurda su cookis e sessions!
Il discorso mi sembra corretto ma devi pensare che molti stanno passando ad asp.net che risolve questo tipo di problemi con l'impostazione dello stato della sessione.

Biank

Alberto Biancardo
33 messaggi dal 04 aprile 2005
Eh, Eh e lo so sono un pò retrogrado, ma ci passo anche io stai tranquillo: ma già mi barcameno far asp e php, arriverà anche l'ora di asp.net e non credo far molto. cmq ho letto un meccaniscmo di login di asp.net e mi sembra che anche li può settare se adoperare cookie persistenti o non. Poi ad un corso mi vengono a dire che le sessioni non si basano su un cookie, e li mi sono girate le palle! Eh, Eh!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.