- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- [Tutorial] La Gestione degli utenti in PHP e MySQL
-
Allora ragazzi la questione password è già stata trattata, ma vorrei discutere ora dell'hashing in sè.
Message-Digest algorithm 5
Ecco qui il famoso MD5... vi sarete chiesti a che serve qualche volta... no? Ebbene, esso non serve affatto a CRIPTARE una password, bensì a calcolare l'hash di una stringa. Per utilizzarlo PHP mette a disposizione la sua bella funzioncina built-in [url=php.net/md5]md5()string md5 ( string str , [ bool raw_output ] )
In questo prototipo troviamo STR che è la stringa da hashare, e l'opzione booleana RAW_OUTPUT che per default è FALSE. Naturalmente non è possibile risalire alla stringa originale, perchè alcune operazioni dell'algoritmo non sono reversibili ( come la moltiplicazione: 6 è 23, ma potrebbe anche essere 16 ).
LA SICUREZZA DI QUESTO ALGORITMO
La sicurezza di questo algoritmo è alta, ma certamente non è sicurissima: sono infinite ( come tutte le cose ) le stringhe possibili che potrebbero dare come risultato lo stesso hash. Però non preoccupatevi: è molto raro che un lamer le trovi, se non con attacco [url=http://en.wikipedia.org/wiki/Brute_force_attack]Brute-Force che tralaltro sarebbe molto dispendioso per lui.COME EVITARE GLI ATTACCHI BRUTE-FORCE
Per evitare attacchi di questo tipo molti siti permettono un massimo di 3 login per uno stesso utente ogni 15 minuti: come il PIN del cellulare... 3 tentativi, allo scadere di questi l'utnte dovrà aspettare 15 minuti ( o quello che volete voi ) prima di tentare un nuovo accesso! Per gestire questo genere di protezione, vi basta controllare i login di un utente ( non interessa manco l'IP ) ed allo scadere dei tre tentativi ( controllati dallo script di accesso che aumenterà i tentativi falliti ) bloccherà i login di quell'utente trascrivendo nel database il timestamp di quell'accesso permettendo allo script del login di calcolare il tempo necesssario per permettere un nuovo accesso. Molti script usano questo metodo, come phpBB e altri forums.MD5 in Javascript?
Ma comunque resta un problema: facciamo passare la password in chiaro??? NOOOO!Ora dobbiamo adottare uno stratagemma!
- Usare la classe MD5 per javascript
- Creare un algoritmo proprio
Ora vi spiegherò come usare MD5 in Javascript, sistema che comunque in alcuni casi non funzionerà... perciò bisogna decidere se
- Obbligare il client ad abilitare js
- Metterlo al corrente che il sistema non è sicuro e passare la password in chiaro
Così dovremo procedere in questo modo:
Avremo un campo <noscript> che setterà un valore POST in modo tale che esso sarà 'disabled' solo se il js è disattivato
<noscript><input type='hidden' name='js' value='disabled'></noscript>
ed un campo <script> che setterà il campo su 'enabled'
<script lang='javascript'>document.write("<input type='hidden' name='js' value='enabled'>");</script>
così, sempre in js cripteremo il campo con [url=http://pajhome.org.uk/crypt/md5/]questo javascript prima che avvenga il passaggio all'altra pagina.
Lo script lato-server controllerà il valore di 'js' e se sarà su enabled non hasherà il campo della password, se invece è su disabled lo hasherà.
LINKS UTILI
http://www.faqs.org/rfcs/rfc1321
http://pajhome.org.uk/crypt/md5/
http://en.wikipedia.org/wiki/Brute_force_attack
http://userpages.umbc.edu/~mabzug1/cs/md5/md5.htmlConclusioni
Ci sono tanti modi per criptare una stringa, io vi ho dato informazioni sul metodo più noto... a voi il resto!Ciao!
-
Pater, è possbile avere la stessa sicurezza con uno script solo di php???
di java non ne so nulla .
-
@Albertorrr said:
Pater, è possbile avere la stessa sicurezza con uno script solo di php???
di java non ne so nulla .Vedi, il problema è la sicurezza del trasferimento dei dati dal client al server. Col Java possiamo hashare la stringa in anticipo rendendo impossibile la decodifica. ( Con la brute-force sarebbe una sfida... )
-
@PaTeR said:
Vedi, il problema è la sicurezza del trasferimento dei dati dal client al server. Col Java possiamo hashare la stringa in anticipo rendendo impossibile la decodifica. ( Con la brute-force sarebbe una sfida... )
Ho capito, volevo dire anche che in alcuni siti mettono un numero casuale da riscrivere, sai come funziona e se è sicuro???
L'ho visto anche in quello di MSN quando fai un nuovo accountCiao
-
@Albertorrr said:
Ho capito, volevo dire anche che in alcuni siti mettono un numero casuale da riscrivere, sai come funziona e se è sicuro???
L'ho visto anche in quello di MSN quando fai un nuovo accountCiao :)Quello serve per non permettere automatizzazioni di registrazioni. E' un'altra cosa... Per avere una sicurezza in più al limite potresti usare SSL...
-
Ho capito
-
posso unirmi al progetto?
-
anche io dovrei fare una cosa del genere...
solo che avete spiegato bene come creare la tabella o le tabelle... poi siete passati alla protezione della passwd... ma in mezzo non avete spiegato molto..
cioè di codice PHP per le loggarsi , le sessioni ecc... come si fanno??
-
Ragazzi nessuno porta più avanti questo progetto??
Sarei curioso di avere il codice di controllo del login per verificare il tutto..
-
Sul sito html a proposito del login che abbiamo progettato un tipo dice:
il valore casuale viene assegnato alla sessione, le sessioni non sono un metodo sicuro se il server non è dedicato, l'invio del valore random rimane comunque trasparente, quindi al limite bisognerebbe settare un cookie e rileggerlo con JS .... ma anche il cookie di fatto è un invio in chiaro di un dato.
In sintesi, stai perdendo tempo per un sistema che comunque non sarà più sicuro di una normae login, a meno che tu non stia su SSL, ma aquel punto tutti questi giri diventerebbero pressapoco inutili.
se non sei in un server configurato ad hoc o sei in un server virtuale è facile che le sessioni vengano semplicemente salvate nella tmp di sistema, condivisa da più utenti e leggibile da tutti.Ma a prescindere da questo, ammesso che tu sia su un server dedicato, nel momento in cui comunichi al client questo fantomatico valore random lo hai già inviato in chiaro, sia che tu l'abbia salvato sulla sessione che non, visto che la sessione non è leggibile dal client e che devi quindi mostrare il valore per assegnarlo o comunicarlo
E' tutto vero??
Lo sforzo che stiamo facendo non serve davvero a niente..
Spero in una risposta.
Grazie!
-
Mi sono un po perso nel progetto...qualcuno può farmi un riassunto?
-
Ho trovato una guida alle sessioni di Davide Coppola per l'autenticazione degli utenti nel sito:([url=http://www.siforge.org/articles/2003/11/10-guida_sessioni_php.html]Guida alle sessioni in PHP [SIForge.org]) ,la sto studiando .
Ho scaricato inoltre questo script per consentire l'accesso a determinate pagine protette di un sito tramite l'autenticazione degli utenti registrati .
[url=http://php.html.it/script/download/3350/advance-login-system/]|► Forum per Webmaster
Fa uso delle sessioni e di un dB.
Mi sembra buono, anche se sono convinta potrebbe essere migliorato.Ad esempio criptando le password , e facendo scadere la sessione non alla chisura del broswer , come fa questo script, ma dopo un intervallo di tempo stabilito.Date un'occhiata ci sono un sacco di spunti.
Proviamo a lavorarci insieme ????
-
lo script che ho scaricato si trova a questo indirizzo
[url=http://php.html.it/script/download/3350/advance-login-system/]|► Forum per Webmaster
-
a me l'indirizzo sembra lo stesso
-
Ehilaa !! Si batte la fiacca eh ?
Buona estate a tutti !!!!!!!
Ci sentiamo presto spero....
-
il progetto è kiuso???
-
Ciao ragazzi,
io ho provato questo metodo ma non riesco a capire se è giusto...
Se visualizzo l'archivio con PhpMyAdmin il campo password è rimasto uguale... non dovrebbe essere registrato criptato?Purtroppo ho iniziato da poco a programmare in php e MySql e non sono molto capace.
Grazie e Buona Giornata a tutti!