Sicurezza Registrazione

venerdì 22 ottobre 2010 - 15.07

almax Profilo | Junior Member

Salve
avrei una domanda da fare :
Ho sviluppato un sistema di autenticazione su db access (per esigenza), che in fase di registrazione genera una chiave e crea un hash delle password con sh1 scrivendo su db le due cose. Il tutto in fase di registrazione viene inviata una mail con i dati dell'utente, unico invio con dati in chiaro.
A questo punto so che la password non è più recuperabile nel db, sia per il webmaster che per l 'utente. Mi rendo conto che la cosa sia un pò rigida ma credo più sicura.
In fase di password dimenticata il client fa una richiesta classica dal pannello login, riceve una mail con un link per poterla reimpostare, il link viene costruito ad hoc per quella richiesta in base a quella mail con dei dati non comprensibili. in querystring si porta dei campi criptati per fare delle verifiche e l'utente cambia la password, riceve una mail con la conferma di reset e i dati nuovi.
Secondo voi è un sistema valido o cmq può con facilità essere bucato ?

Grazie

luigidibiasi Profilo | Guru

>Salve
Ciao,

>avrei una domanda da fare :
>Ho sviluppato un sistema di autenticazione su db access (per
>esigenza), che in fase di registrazione genera una chiave e crea
>un hash delle password con sh1 scrivendo su db le due cose.

Vediamo se ho capito... generi la chiave a partire da una password e ci calcoli l'hash sopra?
poi salvi 'chiave generata dalla password' e hash sul db?

>in fase di registrazione viene inviata una mail con i dati
>dell'utente, unico invio con dati in chiaro.
All'utente invii solo i suoi dati?


Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

almax Profilo | Junior Member

Si allora inserisco la password e con la password genero una chiave poi prendo la password + la chiave e genero un hash, user su una colonna, chiave seconda colonna, hash terza colonna, non merizzo da nessuna parte in chiaro la password.
In fase di registrazione e conclusa registrazione mando una mail con i dati in chiaro come promemoria per avere sempre a dosposizione i dati .. Nel caso i dati vengano persi o dimenticati, tramite link si richiede la restituzione della pass grazie al campo email .. controllo l'esistenza e sparo il link che manda a resettare la password per farne una nuova, alla conclusione mando i dati in chiaro con nova password ...
Velocemente la cosa funziona così .. Con i dovuti acco5gimenti e controlli ..

Grazie

luigidibiasi Profilo | Guru

>Si allora inserisco la password e con la password genero una
>chiave poi prendo la password + la chiave e genero un hash, user
>su una colonna, chiave seconda colonna, hash terza colonna, non
>merizzo da nessuna parte in chiaro la password.

Qui dobbiamo capire una cosa... la password come viene inviata al generatore di chiave (che presumo risieda su un webserver)? Tramite una pagina web?

>In fase di registrazione e conclusa registrazione mando una mail
>con i dati in chiaro come promemoria per avere sempre a dosposizione
>i dati ..
Qui se passa la password in chiaro credo ci sia un problema...

>Nel caso i dati vengano persi o dimenticati, tramite
>link si richiede la restituzione della pass grazie al campo email
>.. controllo l'esistenza e sparo il link che manda a resettare
>la password per farne una nuova, alla conclusione mando i dati
>in chiaro con nova password ...
come sopra, la password non deve viaggiare da nessuna parte...
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

almax Profilo | Junior Member

Quindi mi dici di non inviare i dati all'utente ? La password si viene inviata da form in post a pagina aspx che genera una chiave poi prende password + chiave e genera un hash e butta tutto nel db ...
Ma se non invio i dati come può l'utente avere un servizio di recupero .. Un invio oramai tutti i siti anche che si rispettino lo fanno, anche questo forum invia i dati per email in chiaro ... So che può essere una falla ma quanto grave ?

Grazie

luigidibiasi Profilo | Guru

Rispondo in base alla filosofia che mi hanno insegnato (mai dare nulla per scontato in ambito di sicurezza)... Devi far riferimento a qualche testo di sicurezza su reti per approfondire poiché ricordo in linea di massima l'idea di funzionamento, non i particolari.

>Quindi mi dici di non inviare i dati all'utente ?
La password sicuramente no.

>la password si viene inviata da form in post a pagina aspx che genera una
>chiave poi prende password + chiave e genera un hash e butta
>tutto nel db ...

Se passi i dati 'in chiaro' dalla pagina html alla pagina aspx tramite POST o GET non hai nessuna sicurezza... pertanto sei già vulnerabile (vulnerabilissimo!!!) in questo punto.

Se li passi tramite https aggiungi un buon livello di 'sicurezza', simile a quello dei siti di cui parli. (legata comunque agli algoritmi che poi farai usare tra webserver e webbrowser) Tuttavia, ti serve un certificato rilasciato da una autorità garante.
Questo livello di sicurezza lo devi aggiungere obnligatoriamente se vuoi un sistema 'abbastanza sicuro'.

>Ma se non invio i dati come può l'utente avere un servizio di
>recupero..
All'utente invierai solo username + e-mail + tutti i dati di registrazione omettendo PASSWORD, CHIAVE E HASH. (sono tre valori correlati tra di loro ed è pericoloso mandarli insieme...)

In genere quello che si fa è <<fidarsi>> che l'utente abbia accesso privilegiato alla propria e-mail quindi ti basta salvare la mail alla quale inviare il link di reimpostazione e far funzionare tutto sempre tramite HTTPS.
L'utente utilizzerà un modulo per chiedere la reimpostazione e in tale modulo inserirà o la propria e-mail o il proprio username.

Salvare la chiave su DB mi dà l'idea di volerla cifrare per nasconderla a occhi indiscreti. L'uso della hash non mi è chiaro.

> Un invio oramai tutti i siti anche che si rispettino
>lo fanno, anche questo forum invia i dati per email in chiaro
Chiaramente il sistema è sicuro se l'e-mail non è stata violata. In caso contrario tutto il castello cade.

(dotnethell è un forum non una banca... se invia la password in chiaro tramite e-mail non è molto grave!)

>... So che può essere una falla ma quanto grave ?
>
Dipende da dove lasci il fianco libero per essere attaccato. I dati sensibili devono viaggiare sempre su connessione protetta.

>Grazie

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

almax Profilo | Junior Member

Intanto grazie ..
Si in effetti il tutto cambia in base al profilo di sicurezza ci sia bisogno ..
Al momento il mio intento è quello di creare un sistema abbastanza sicuro per un e-commerce e tra me e me mi chiedevo se questo lo fosse ...
allora la procedura è così .. La chiave e randomica quindi non ha nessi logici se non il random di un tot di caratteri, appena creata una chiave prendo chiave più password e creo un hash dell'addizione .. il tutto perchè da un hash non è possibile risalire alla password, è logico che in fase di login ho bisogno di tutti e due i dati per fare una verifica di autenticazione .. E' una sorta di maschera per la password ... Se apri il db non c'è modo di risalire, se conosci la password entri come entresresti ovunque ..
Per il discorso della mail gli unici dati che viaggiano sono user, pass e dati anagrafici la prima volta in fase di reset user e pass nuova ... E' logico che in un contesco bancario il tutto sarebbe fatto in https, ma in un e-commerce credo che possa andare, che dici
?

Grazie ancora

luigidibiasi Profilo | Guru

>allora la procedura è così .. La chiave e randomica quindi non
>ha nessi logici se non il random di un tot di caratteri,
> appena
>creata una chiave prendo chiave più password e creo un hash dell'addizione

Scusami ma non ho capito bene come procedi...

fai Hash([CHIAVE XOR PASSWORD]) ?


>.. il tutto perchè da un hash non è possibile risalire alla password.

>è logico che in fase di login ho bisogno di tutti e due i dati
>per fare una verifica di autenticazione ..
Username e Password scritti dal cliente e inviati al server (in chiaro se non c'è https) sono soggette a violazione poiché se intercettati scavalcano la sicurezza che tu metti nel database...

>E' una sorta di maschera
>per la password ... Se apri il db non c'è modo di risalire, se
>conosci la password entri come entresresti ovunque ..
Si, proteggi da occhi indiscreti che accedono direttamente alla tabella sul DB ma il problema lo hai sul canale Browser->Server se non è cifrato...

>Per il discorso della mail gli unici dati che viaggiano sono
>user, pass e dati anagrafici la prima volta in fase di reset
>user e pass nuova ...
Qui credo hai un problema.

Se noti la maggior parte dei siti sicuri non invia mai la password (vecchia o nuova che sia) tramite e-mail. In realtà la password non viaggia mai in chiaro. (solo cifrata quando ti registri e quando la reimposti)

>E' logico che in un contesco bancario il
>tutto sarebbe fatto in https, ma in un e-commerce credo che possa
>andare, che dici
>?
Se vuoi sicurezza e non cifri i dati sul canale di comunicazione hai una sola alternativa... implementare qualche algoritmo di cifratura in Javascript però la cosa non mi sembra delle più semplici quindi posso consigliarti di scaricarti un certificato di test da verisign e implementare https

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5