Joomla.it Forum

Non solo Joomla... => Sviluppo => : CarloG 15 Feb 2009, 16:14:39

: Come Joomla registra password
: CarloG 15 Feb 2009, 16:14:39
Mi interessa sapere quale crittografia utilizza Joomla per generare la password; ho provato md5 ma, dato un valore, mi sembra diverso il risultato generato con http://md5encryption.com/ da quello registrato sulla tabella jos_users; che hash viene usato?
Grazie
Carlo
ps. mi serve per popolare la tabella utenti con un file esterno.
: Re: Come Joomla registra password
: copesc 15 Feb 2009, 17:34:21
Ciao, Joomla usa MD5 Salted

http://csdir.org/Security/how-to-create-a-salted-md5-hash.html
: Re: Come Joomla registra password
: CarloG 15 Feb 2009, 18:34:44
ciao copesc,
ma come puoi immaginare devo registrare la password esattamente come la registrerebbe joomla, in modo che, quando un utente fa il login, joomla lo riconosca:
che lunghezza ha il salt?
e' un md5 semplice o doppio (come dal link suggeritomi)?
altre caratteristiche?
grazie anticipate
Carlo
: Re:Come Joomla registra password
: Garo73 20 May 2009, 10:07:38
Anche io ho lo stesso problema e non so come risolvere.
CarloG hai trovato il metodo????
: Re:Come Joomla registra password
: moise 21 Jul 2009, 20:15:00
http://blog.phil-taylor.com/2008/08/18/joomla-15x-password-hash-generator/#comments

prova qui io ho risolto, ma non riesco a generare il campo activation
: Re:Come Joomla registra password
: giancarlo75 26 Jul 2011, 18:17:03
Risposta molto in ritardo, ma siccome ho avuto lo stesso problema e ho risolto l'arcano, posto la soluzione, non sia mai che a qualcuno serva. Va bene anche per 1.6
:
<?php
    $pass
="password scelta dall'utente joomla";
    function 
PasswordCasuale($lunghezza=32){
        
$caratteri_disponibili ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm nopqrstuvwxyz1234567890";
        
$password "";
        for(
$i 0$i<$lunghezza$i++){
            
$password $password.substr($caratteri_disponibili,rand(0,strlen($caratteri_disponibili)-1),1);
        }
    return 
$password;
    }
    
$salt=PasswordCasuale();
    
$password=md5($pass.$salt).":".$salt;
    echo 
$password;
?>

: Re:Come Joomla registra password
: bertoandrea86 29 Jul 2011, 18:46:00
Risposta molto in ritardo, ma siccome ho avuto lo stesso problema e ho risolto l'arcano, posto la soluzione, non sia mai che a qualcuno serva. Va bene anche per 1.6
:
<?php
    $pass
="password scelta dall'utente joomla";
    function 
PasswordCasuale($lunghezza=32){
        
$caratteri_disponibili ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm nopqrstuvwxyz1234567890";
        
$password "";
        for(
$i 0$i<$lunghezza$i++){
            
$password $password.substr($caratteri_disponibili,rand(0,strlen($caratteri_disponibili)-1),1);
        }
    return 
$password;
    }
    
$salt=PasswordCasuale();
    
$password=md5($pass.$salt).":".$salt;
    echo 
$password;
?>


Molto utile anche per il futuro!
Thanks :)
: Re:Come Joomla registra password
: flava137 01 Aug 2011, 16:45:43
dato che serve anche a me questa cosa...come faccio a popolare il db utenti da un file esterno?
: Re:Come Joomla registra password
: bertoandrea86 01 Aug 2011, 19:32:12
dato che serve anche a me questa cosa...come faccio a popolare il db utenti da un file esterno?
???
: Re:Come Joomla registra password
: giancarlo75 02 Aug 2011, 10:18:22
Dipende da che tipo di file è e dai dati che hai a disposizione. Se hai i dati già in una tabella a parte è molto più comodo altrimenti il primo passo è lavorare sul file che hai a disposizione per inserire tutti i dati in una tabella supplementare. Supponiamo che sia un file di testo dove stanno scritti i dati principale degli utenti (name, username, email, password); se ogni utente occupa una riga diversa ti va ancora bene perchè con un editor di testo tipo notepad++ puoi mettere una serie di caratteri davanti ad ogni riga, tipo XXXXX e poi usare la funzione explode di php per avere un array dove ogni elemento contiene i dati di un utente. Poi ci devi lavorare ancora per separare i dati per ogni riga. Insomma è un  po' macchinoso.
Una volta che hai tutti i dati su una tabella supplementare devi scorrerli e fare un insert nella tabella jos_users (ma anche nella tabella jos_user_usergroup_map) osservando bene com'è strutturato il database di Joomla. Se invece non hai a disposizione la password dell'utente potresti crearla usando la funzione PasswordCasuale con una lunghezza che decidi tu. L'importante è registrare le password in chiaro su una tabella supplementare temporanea altrimenti non puoi recuperarle, oppure inviare una email ad ogni insert per fornire la password all'utente.
Queste sono indicazioni di massima, anche il codice per creare le password è generalizzato, poi bisogna vedere ogni singolo caso.
: Re:Come Joomla registra password
: flava137 02 Aug 2011, 11:38:26
Dipende da che tipo di file è e dai dati che hai a disposizione. Se hai i dati già in una tabella a parte è molto più comodo altrimenti il primo passo è lavorare sul file che hai a disposizione per inserire tutti i dati in una tabella supplementare. Supponiamo che sia un file di testo dove stanno scritti i dati principale degli utenti (name, username, email, password); se ogni utente occupa una riga diversa ti va ancora bene perchè con un editor di testo tipo notepad++ puoi mettere una serie di caratteri davanti ad ogni riga, tipo XXXXX e poi usare la funzione explode di php per avere un array dove ogni elemento contiene i dati di un utente. Poi ci devi lavorare ancora per separare i dati per ogni riga. Insomma è un  po' macchinoso.
Una volta che hai tutti i dati su una tabella supplementare devi scorrerli e fare un insert nella tabella jos_users (ma anche nella tabella jos_user_usergroup_map) osservando bene com'è strutturato il database di Joomla. Se invece non hai a disposizione la password dell'utente potresti crearla usando la funzione PasswordCasuale con una lunghezza che decidi tu. L'importante è registrare le password in chiaro su una tabella supplementare temporanea altrimenti non puoi recuperarle, oppure inviare una email ad ogni insert per fornire la password all'utente.
Queste sono indicazioni di massima, anche il codice per creare le password è generalizzato, poi bisogna vedere ogni singolo caso.


wow...ti ringrazio tantissimo cercherò di trarre frutto da questo tuo aiuto... ;)
: Re:Come Joomla registra password
: mau_develop 02 Aug 2011, 12:58:43
L'importante è registrare le password in chiaro su una tabella supplementare temporanea altrimenti non puoi recuperarle
-----------------------------------------------------
questo è importantissimo farlo, altrimenti come fai a fare qs:
http://forum.joomla.it/index.php/topic,141257.0.html

SOprattutto registrare anche temporaneamente pw in chiaro è fuori da ogni netiquette e regola di privacy.
Se io sapessi che qualcuno registra la mia pw in chiaro gli spazzolo il sito così impara a non mettere a rischio gli user specialmente se al profilo sono legati dati privati.

M.
: Re:Come Joomla registra password
: giancarlo75 02 Aug 2011, 13:31:35
Ammesso che non si possa fare in modo che gli utenti si scelgano da soli le password rimane un po' un problema che bisogna pensare bene a come risolvere. Io salvo le password in una variabile di sessione che viene cancellata dalla stessa pagina che la mostra, subito dopo averla richiamata.
: Re:Come Joomla registra password
: flava137 02 Aug 2011, 14:01:48
Dipende da che tipo di file è e dai dati che hai a disposizione. Se hai i dati già in una tabella a parte è molto più comodo altrimenti il primo passo è lavorare sul file che hai a disposizione per inserire tutti i dati in una tabella supplementare. Supponiamo che sia un file di testo dove stanno scritti i dati principale degli utenti (name, username, email, password); se ogni utente occupa una riga diversa ti va ancora bene perchè con un editor di testo tipo notepad++ puoi mettere una serie di caratteri davanti ad ogni riga, tipo XXXXX e poi usare la funzione explode di php per avere un array dove ogni elemento contiene i dati di un utente. Poi ci devi lavorare ancora per separare i dati per ogni riga. Insomma è un  po' macchinoso.
Una volta che hai tutti i dati su una tabella supplementare devi scorrerli e fare un insert nella tabella jos_users (ma anche nella tabella jos_user_usergroup_map) osservando bene com'è strutturato il database di Joomla. Se invece non hai a disposizione la password dell'utente potresti crearla usando la funzione PasswordCasuale con una lunghezza che decidi tu. L'importante è registrare le password in chiaro su una tabella supplementare temporanea altrimenti non puoi recuperarle, oppure inviare una email ad ogni insert per fornire la password all'utente.
Queste sono indicazioni di massima, anche il codice per creare le password è generalizzato, poi bisogna vedere ogni singolo caso.


Io devo prendere solo i dati di un utente...io faccio un controllo su un database e mi prendo i dati di un solo utente...a questo punto tecnicamente cosa mi conviene fare?
: Re:Come Joomla registra password
: jeckodevelopment 02 Aug 2011, 14:31:07
ho fatto delle ricerche in JED (anche per altri motivi) ed ho trovato quest'estensione... vedi se può esserti utile
http://extensions.joomla.org/extensions/access-a-security/authentication-cloud-based/3444
: Re:Come Joomla registra password
: giancarlo75 02 Aug 2011, 15:58:54
Ma scusa, se è un solo utente non ti conviene inserirlo manualmente dal backend e poi passargli la password per email?
: Re:Come Joomla registra password
: flava137 02 Aug 2011, 16:09:05
Ma scusa, se è un solo utente non ti conviene inserirlo manualmente dal backend e poi passargli la password per email?
No allora forse non mi sono spiegato bene...nel momento in cui l'utente si logga, io devo andare a verificare su un database grandissimo se c'è (per questo c'è una classe java ecc ma non è questo che è importante per questo tutto ok), poi nel momento in cui ho trovato l'utente (che già ha una sua password) devo farlo loggare al sito
: Re:Come Joomla registra password
: jeckodevelopment 02 Aug 2011, 16:09:51
@giancarlo75
perché ottenuta la procedura con un utente, si può ripetere su n utenti no?  :P
: Re:Come Joomla registra password
: flava137 02 Aug 2011, 16:11:23
@giancarlo75
perché ottenuta la procedura con un utente, si può ripetere su n utenti no?  :P
ecco esatto...ps: grazie per il link che mi hai passato...
: Re:Come Joomla registra password
: flava137 02 Aug 2011, 16:21:57
ho fatto delle ricerche in JED (anche per altri motivi) ed ho trovato quest'estensione... vedi se può esserti utile
http://extensions.joomla.org/extensions/access-a-security/authentication-cloud-based/3444 (http://extensions.joomla.org/extensions/access-a-security/authentication-cloud-based/3444)
Ho visto come fa e sono riuscito a permettere l'autenticazione, solo che c'è una cosa che non mi quadra: nel momento in cui permetto il login dell'utente, esso viene registrato sul db locale di joomla. Se dopo però cerco di rientrare nel sito joomla con altre credenziali va a vedere sempre quell'utente? come è possibile? vede l'indirizzo ip?
: Re:Come Joomla registra password
: giancarlo75 02 Aug 2011, 16:47:28
Non ci ho capito niente ma sicuramente l'ip non è da considerare, prova a cancellare i cookie tra logout e login, dubito però che non sia nemmeno quello. Ma alla fine cosa vorresti fare, un bridge tra due siti di cui uno joomla e l'altro no?
: Re:Come Joomla registra password
: flava137 02 Aug 2011, 18:02:20
Non ci ho capito niente ma sicuramente l'ip non è da considerare, prova a cancellare i cookie tra logout e login, dubito però che non sia nemmeno quello. Ma alla fine cosa vorresti fare, un bridge tra due siti di cui uno joomla e l'altro no?
quello che io vorrei fare è semplicemente permettere il login a utenti esterni, (quindi prendendoli da un db esterno) e seguendo quel plugin ci sono riuscito...solo che se provo a rientrare nel sito come un altro utente mi vede sempre come il primo utente che ho loggato...
: Re:Come Joomla registra password
: giancarlo75 02 Aug 2011, 19:37:21
Prima di tutto controlla la tabella jos_users per vedere se il plugin l'ha popolata con i dati estratti dall'altro database o no. Secondo me non lo ha fatto perchè lavora diversamente. Comunque controlla se ha inserito dei dati in jos_users soprattutto che non si ripetano (username e email devono essere univoci).
Una prova da fare subito è eseguire il logout, cancellare tutti i dati di navigazione ed eseguire il login con un altro username, per vedere se fa ancora quel difetto, se non lo fa più il problema non sussiste o comunque è molto meno grave perchè è legato ai cookie e si potrebbe risolvere eliminando il cookie di sessione al logout.
: Re:Come Joomla registra password
: flava137 02 Aug 2011, 19:47:25
Prima di tutto controlla la tabella jos_users per vedere se il plugin l'ha popolata con i dati estratti dall'altro database o no. Secondo me non lo ha fatto perchè lavora diversamente. Comunque controlla se ha inserito dei dati in jos_users soprattutto che non si ripetano (username e email devono essere univoci).
Una prova da fare subito è eseguire il logout, cancellare tutti i dati di navigazione ed eseguire il login con un altro username, per vedere se fa ancora quel difetto, se non lo fa più il problema non sussiste o comunque è molto meno grave perchè è legato ai cookie e si potrebbe risolvere eliminando il cookie di sessione al logout.
grazie mille!!!
: Re:Come Joomla registra password
: flava137 04 Aug 2011, 18:57:34
Sono riuscito a fare tutto...tranne un'ultima cosa, salvare la password del mio utente, cioè una volta che l'ho identificato e lo inserisco nel db joomla, come faccio a inserire anche la sua password? esiste un campo response->password?
: Re:Come Joomla registra password
: giancarlo75 04 Aug 2011, 19:51:38
Joomla salva la password solo nel campo password della tabella jos_users, ma non la salva in chiaro, devi prima convertirla con il codice che avevo postato.
Comunque tu registra gli utenti una sola volta al primo login, non a tutti i login.
: Re:Come Joomla registra password
: flava137 04 Aug 2011, 21:00:53
Joomla salva la password solo nel campo password della tabella jos_users, ma non la salva in chiaro, devi prima convertirla con il codice che avevo postato.
Comunque tu registra gli utenti una sola volta al primo login, non a tutti i login.
sisi li registro solo al primo login. ho guardato quel codice ma non riesco a capire dov'è che la va a salvare!!! vedo un echo alla fine che stampa ma dove la salva? in password? e password non andrebbe messo in qualche campo del db joomla?
: Re:Come Joomla registra password
: giancarlo75 05 Aug 2011, 09:46:43
<?php
    $pass="password scelta dall'utente joomla";
    function PasswordCasuale($lunghezza=32){
        $caratteri_disponibili ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm nopqrstuvwxyz1234567890";
        $password = "";
        for($i = 0; $i<$lunghezza; $i++){
            $password = $password.substr($caratteri_disponibili,rand(0,strlen($caratteri_disponibili)-1),1);
        }
    return $password;
    }
    $salt=PasswordCasuale();
    $password=md5($pass.$salt).":".$salt;
    echo $password;
?>
Questo codice prende la password come la digita l'utente nella variabile $pass, e la trasforma nella corrispondente password come la vuole Joomla nella variabile $password. Poi siccome è un esempio qui la stringa viene stampata sulla pagina ma in realtà puoi farne quello che vuoi. Togli l'echo e fai un insert o un update nel database per inserirla. Anche la variabile $pass che qui viene scritta direttamente sulla pagina è quasi certo che arrivi da un modulo, quindi $pass = $_POST['password_utente'];
: Re:Come Joomla registra password
: flava137 08 Aug 2011, 19:14:38
Questo codice prende la password come la digita l'utente nella variabile $pass, e la trasforma nella corrispondente password come la vuole Joomla nella variabile $password. Poi siccome è un esempio qui la stringa viene stampata sulla pagina ma in realtà puoi farne quello che vuoi. Togli l'echo e fai un insert o un update nel database per inserirla. Anche la variabile $pass che qui viene scritta direttamente sulla pagina è quasi certo che arrivi da un modulo, quindi $pass = $_POST['password_utente'];
Il fatto è che tutti gli altri dati dell'utente li metto in response->..., come ho visto fare nel plugin che mi hai consigliato di guardare...response non ha un campo anche per la password?
: Re:Come Joomla registra password
: giancarlo75 09 Aug 2011, 17:05:15
Il plugin non te l'ho consigliato io. Comunque se hai la possibilità di procedere attraverso codice, se devi fare una nuova insert fai:
:
// Stabilisce la connessione al database
require_once 'configuration.php'; // il percorso deve puntare al file configuration.php di joomla
$conf = new JConfig;
$conn = mysql_connect($conf->host, $conf->user, $conf->password);


$sql = "INSERT INTO jos_users (password) VALUES ('".$password."')";
$result = mysql_query($sql, $conn);

Se invece devi inserire la password ad utenti già presenti nella tabella devi sapere l'id dell'utente per il quale vuoi inserire la password:
:
// Codice di connessione uguale al precedente

$sql = "UPDATE jos_users SET password='".$password."' WHERE id='".$id_utente."' LIMIT 1";
$result = mysql_query($sql, $conn);