Joomla.it Forum
Non solo Joomla... => Sviluppo => : webkingXXX 01 Feb 2010, 23:57:58
-
Salve a tutti,
sto creando un piccolo componente software in PHP (stand alone, indipendente da joomla) che richiede una coppia di credenziale (username/password) per accedere. Vorrei che queste credenziali fossero controllate direttamente su un database di joomla. Per farlo perciò devo connettermi alla tabella jos_users, e tramite query controllare la presenza di una determinata copia user/password.
Qui sorge il problema:
nelle versioni precedenti, Joomla utilizzava come algoritmo di cripting la semplice funzione in php "md5()". Ora noto che il campo password è formato da una stringa in md5() più un salt (così ho appreso che si chiamano i valori oltre i ":").
Dal momento in cui l'utente che deve accedere inserirà la password non criptata, per effettuare un controllo sul db devo sapere come criptare la password inserita per poi confrontarla con quella salvata nel database. Come posso fare?
Vi ringrazio,
Alberto.
-
Ciao webkingXXX,
mi sembra un quesito piuttosto tecnico, se non ti riponde nessuno ti spostiamo nella sezione sviluppo.
A presto!
-
mi sa che nella 1.5 la passwd viene codificata in un formato combinato di MD5 e SHA-1 .... ma non sono sicuro... l'avevo letto da qualche parte!
-
Ciao Ciao webkingXXX,
sposto in sviluppo che magari qualcuno ne sà di più...
Ciao!
-
Prima ti linko una mia cosina:
http://www.spazioalchimia.it/laboratorio-di-sperimentazione/1-tutto-nasce-da-un-pensiero/51-joomla-lmd5-e-solo-un-opinione
a te basta la password md5 e l'username per fare la query, il salt lo aggiunge lui e gli serve solo per verificare con le acl se sei veramente chi dici di essere.
un plugin di verifica di autenticazione di joomla è abbastanza banale, recupera la variabile $credentials che contiene i dati che inserisci nel form e dopo averla pulita fa il match con la query.
non credo tu abbia particolari problemi a realizzarlo.
... certo non è una grandissima idea fare una query (poi proprio sull'auth) esternamente il Framework, rischi di compromettere seriamente la sicurezza di tutto e non è difficilissimo riuscire a infilarsi tra le due appz.
M.
-
Ciao, ti ringrazio per la risposta e per il link che mi hai postato. Tuttavia la questione che viene citata nella pagina linkata non è assai rilevante: l'autore parte dal presupposto di essere in grado di accedere al database tramite injection. Questo significa che ha accesso quasi diretto al db, ed il problema è assai più grosso rispetto a quello di recupero della password di amministratore. Ad ogni modo si potrebbe facilmente aggirare il problema se la stringa di attivazione fosse registrata nel DB in MD5, e mandata all'untete decriptata. In tal modo si risolverebbe la falla (credo sia già stato fatto nelle versioni 1.5.14).
Per quanto riguarda il mio modulo, sono riuscito a farcela senza il framework, ho costruito io una funzione
joomlaPassword($username, $password)
che dati in ingresso l'username e la password (decriptata dell'utente) restituisce la password criptata con il salt. In altre parole si tratta di prendere dal campo della password relative all'$username la stringa dopo il carattere ":". Questa stringa viene detta Salt.
La password finale sarà perciò cos' calcolata
$passwordToCheck=md5($password.$salt).$salt;
Ora basta effettuare una query al DB
$query="SELECT * from jos_users WHERE username='$username' AND password='$passwordToCheck'";
[...]
Se il risultato della query è 1, allora l'untete è loggato (con tutto ciò che ne consegue).
Non avendo trovato alcun italiano che abbia saputo darmi spiegazioni, spero che questo mio post sia d'aiuto a coloro che hanno necessità di sviluppare appicazioni da terze parti per joomla.
Ad essere sincero mi aspettavo di ricevere maggiori informazioni su questo forum, ma la questione è probabilmente troppo tecnica e richiede una certa competenza non comune ai comuni utilizzatori di joomla.
P.S. Per quanto riguarda la sicurezza, infilarsi nel mio condice è davvero difficile :), spero di non dovermi mai rimangiare queste parole!
-
la stringa di attivazione fosse registrata nel DB in MD5, e mandata all'untete decriptata.
lo dovresti fare prima di codificarla in md5 perché poi non puoi tornare indietro...
Se il risultato della query è 1, allora l'untete è loggato (con tutto ciò che ne consegue).
per sapere se è loggato non ti serve la query...
-
Non avendo trovato alcun italiano che abbia saputo darmi spiegazioni, spero che questo mio post sia d'aiuto a coloro che hanno necessità di sviluppare appicazioni da terze parti per joomla.
--------------------------------------------------------------------
sinceramente spero che nessuno faccia quello che vuoi fare tu, non lo ritenevo sano, non lo ritengo sano, non lo riterrò mai sano.
Ad essere sincero mi aspettavo di ricevere maggiori informazioni su questo forum, ma la questione è probabilmente troppo tecnica e richiede una certa competenza non comune ai comuni utilizzatori di joomla.
------------------------------------------------------------------
Mi fa piacere invece sapere che c'è qualcuno con buone competenze su Joomla e sul suo codice tanto da domandare agli altri ciò che avrebbe facilmente scoperto leggendo il codice.
P.S. Per quanto riguarda la sicurezza, infilarsi nel mio condice è davvero difficile :)
-----------------------------------------------------------------
Se fai le cose di cui sopra dubito molto
la stringa di attivazione fosse registrata nel DB in MD5, e mandata all'untete decriptata.
----------------------------------------------------
Se poi ragioni così i dubbi diventano certezze...
si tratta di prendere dal campo della password relative all'$username la stringa dopo il carattere
------------------------------------------------------
così una cosa fatta per incrementare la sicurezza se ne va a farsi fottere.... sei un genio!
... ma sono solo opinioni ;) .... aria fritta, pura vida!
M.
-
@scarinciotto
Grazie sanciotto, si ovviamente ptrima il codice di attivazione andrebbe mandato all'utente via email in forma chiara, poi "storata" in DB criptata. In tal modo chi si infiltra non ha modo di modificare la pass.
Per la questione dell'utente "loggato" mi sono espresso male, mi serve solo per sapere se l'utente ha immesso i dati corretti.
@mau_develop
Rispondo non per colpo ferire, ma semplicemente perchè non mi pare giusto essere attaccato così da chi pretende di sapere quanto sia valido sicuro il mio codice senza neppure averlo guardato.
Tanto per essere chiari: ho cercato di seguire esattamente la politica delle funzioni del frameweork di joomla.
INOLTRE: come utente finale, sono d'accordo con le estensioni Open Source e l'utilizzo di fuznioni di terze parti. Tuttavia da programmatore non mi fido assolutamente del lavoro svolto da altri e non da me stesso. Paradossalmente preferisco che il mio sito sia più vulnerabile, a costo però di sapere come è stato sviluppato e di conoscerne ogni riga di codice.
Ho deciso di utilizzare Joomla per semplice comodità amministrativa, mi sembra un buon prodotto e i ragazzi di Joomla.org sono davvero fantastici.
Infine, mi rivolgo a te: se sei così bravo nel trattare la sicurezza, perchè allora non mi hai spiegato come fare il modulo? Ti sei limitato solo a dire che non si potesse fare, ma alla fine dei conti non hai saputo indicare l'informazione che domandavo. Avresti fatto più bella figura a dire che ignoravi questo aspetto di Joomla.
-
-------------------------------
Ad essere sincero mi aspettavo di ricevere maggiori informazioni su questo forum
--------------------
critichi la mano che un'incompetente come me ti ha voluto dare, sei stato tu a postare qui mica ti ho chiamato io ...per chiarezza...
...poi
----------------------
ma la questione è probabilmente troppo tecnica e richiede una certa competenza non comune ai comuni utilizzatori di joomla.
----------------------
stai snobbando e spruzzando cacca ritenendoti ad un livello più elevato...
quindi...
@mau_develop
Rispondo non per colpo ferire, ma semplicemente perchè non mi pare giusto essere attaccato
dai... su ... fa da bravino ;)
M.
-
>:(
-
critichi la mano che un'incompetente come me ti ha voluto dare, sei stato tu a postare qui mica ti ho chiamato io
Non sono stao io a criticarti, ti invito a rileggere la discussione: tu hai avanzato supposizioni sulla vulnerabilità del mio codice senza neppure averci dato uno sguardo.
stai snobbando e spruzzando cacca ritenendoti ad un livello più elevato...
quindi...
Il tuo è un modo assai volgare di esprimerti, non mi pare assolutamente di aver usato un tono del genere dai tuoi confronti. Fino a prova contraria sei stato tu a darmi dell'incompetente in materia, rileggi i post per favore.
@mau_develop
Rispondo non per colpo ferire, ma semplicemente perchè non mi pare giusto essere attaccato
dai... su ... fa da bravino ;)
M.
Vi ringrazio per l'attenzione dedicatami,
per questioni più tecniche d'ora in poi mi rivolgerò direttamente al team di development di Joomla (in inglese). Purtroppo è stato un mio errore rivolgermi qui, non potevo sapere che non ci fossero programmatori del core di Joomla.
Buona giornata.
-
per questioni più tecniche d'ora in poi mi rivolgerò direttamente al team di development di Joomla (in inglese)
---------------------------------------------
:):):) che figo che sei, ti stimo!
M.