Joomla.it Forum
Non solo Joomla... => Sviluppo => : ventoevela 14 Nov 2006, 11:56:02
-
Salve ragazzi vorrei fare il login con alcune pagine di un script da me realizzato usando utenti e password del db di joomla sapreste darmi qualche indicazione su come collegarmi?
-
Come collegarti al db o come collegarti a Joomla?
I dati degli utenti sono inseriti in un all'interno di una tabella di un db MySQL e la password è cifrata con un oneway MD5.
La tabella dove trovi info sugli utenti è jos_users (jos_ è il prefisso che potrebbe essere però diverso a seconda dell'installazione che ti interessa)
Comunque con phpMyAdmin hai modo di dare un occhio completamente alla struttura del db.
-
ti ringrazio delle info e dell'attenzione....forse in realtà potrei essere più preciso, io con il mio vecchio db mi collegavo in questo modo:
if ($_GET['op'] == "login") {
echo "<LoginResult>";
$tabella = $table_clienti;
$get_nomeutente = urldecode($_GET['username']);
$get_password = urldecode($_GET['password']);
connessione_db ($db_host, $db_user, $db_password, $db_database);
$db_query = "SELECT * FROM $tabella WHERE NomeUtente = '$get_nomeutente';";
$res = @mysql_query($db_query, $_SESSION['db_connessione'])or die( "Errore: " . mysql_error() );
if (mysql_num_rows($res) == 0) {
echo "<Exists>false</Exists>";
mentre ora appunto anche per li problema delle pass in md5 come dovrei fare?
-
Penso che dovresti partire da qui:
http://it.php.net/manual/it/function.md5.php (http://it.php.net/manual/it/function.md5.php)
Non mi convince molto la scelta del metodo GET per il passaggio di dati sensibili
-
ti ringrazio delle info e dell'attenzione....forse in realtà potrei essere più preciso, io con il mio vecchio db mi collegavo in questo modo:
if ($_GET['op'] == "login") {
echo "<LoginResult>";
$tabella = $table_clienti;
$get_nomeutente = urldecode($_GET['username']);
$get_password = urldecode($_GET['password']);
connessione_db ($db_host, $db_user, $db_password, $db_database);
$db_query = "SELECT * FROM $tabella WHERE NomeUtente = '$get_nomeutente';";
$res = @mysql_query($db_query, $_SESSION['db_connessione'])or die( "Errore: " . mysql_error() );
if (mysql_num_rows($res) == 0) {
echo "<Exists>false</Exists>";
Tu l'SQL injection non sai nemmeno cos'è? Vero? :-\
Tralasciando il fatto che il tuo codice di login è terribile, per fare quello che dici ti basta accedere alla tabella utenti di Joomla e poi procedere come hai sempre fatto.
$db_query = "SELECT * FROM jos_users WHERE username='$get_nomeutente' AND password='" . md5($get_password) . "'";
-
Tu l'SQL injection non sai nemmeno cos'è? Vero? :-\
Cosa serve saperlo se magari passi le password in chiaro? :)
-
Cosa serve saperlo se magari passi le password in chiaro? :)
La password in chiaro viene trasmessa dal tuo pc, quindi è recuperabile solo dalla cache del tuo pc.
Ma se la gestione del login non è protetta, si può entrare lo stesso senza bisogno di sapere alcuna password.
-
quindi a prescindere dallo schifoso codice...in quanto di meglio non so fare, andrebbe bene cosi per fare il login?...cambiando il prefisso della tabella ovviamente con quella _users di Jommla:
if ($_GET['op'] == "login") {
echo "<LoginResult>";
$tabella = $table_clienti;
$get_nomeutente = urldecode($_GET['username']);
$get_password = urldecode($_GET['password']);
connessione_db ($db_host, $db_user, $db_password, $db_database);
$db_query = "SELECT * FROM jos_users WHERE username='$get_nomeutente' AND password='" . md5($get_password) . "'";
$res = @mysql_query($db_query, $_SESSION['db_connessione'])or die( "Errore: " . mysql_error() );
if (mysql_num_rows($res) == 0) {
echo "<Exists>false</Exists>";
-
Sì, ma magari fai:
if (mysql_num_rows($res) != 1) {
echo "<Exists>false</Exists>";
-
ma quale è la differenza con: if (mysql_num_rows($res) == 0) {
sarebbe meglio che mi dai qualche spiegazione...altrimenti quando imparo!!!
-
ma quale è la differenza con: if (mysql_num_rows($res) == 0) {
sarebbe meglio che mi dai qualche spiegazione...altrimenti quando imparo!!!
Tu stai verificando la correttezza dei dati di login, nonchè l'esistenza del relativo utente.
La coppia (username, password) identifica in maniera univoca un singolo utente.
Pertanto se i dati sono corretti DEVE essere restituito un solo record, e l'unica condizione giusta è che sia proprio un solo record.
Se tu testi == 0, implichi che un numero di record superiore ad 1 sia corretto come risultato della query, quindi dai spazio agli attacchi.
-
ok grazie..ora faccio delle prove per vedere se riesco finalmente ad autenticarmi...ci sentiamo presto...ciaoo!!!