Joomla.it Forum

Non solo Joomla... => Sviluppo => : ventoevela 14 Nov 2006, 11:56:02

: Login su db
: 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?
: Re: Login su db
: gallus 14 Nov 2006, 12:42:05
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.
: Re: Login su db
: ventoevela 14 Nov 2006, 14:57:54
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?
: Re: Login su db
: gallus 14 Nov 2006, 15:49:46
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
: Re: Login su db
: napo 14 Nov 2006, 15:57:29
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) . "'";
: Re: Login su db
: gallus 14 Nov 2006, 16:01:06

Tu l'SQL injection non sai nemmeno cos'è? Vero? :-\


Cosa serve saperlo se magari passi le password in chiaro? :)
: Re: Login su db
: napo 14 Nov 2006, 16:05:23
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.
: Re: Login su db
: ventoevela 14 Nov 2006, 16:12:41
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>";
: Re: Login su db
: napo 14 Nov 2006, 16:19:15
Sì, ma magari fai:

if (mysql_num_rows($res) != 1) {
    echo "<Exists>false</Exists>";
: Re: Login su db
: ventoevela 14 Nov 2006, 16:48:03
ma quale è la differenza con: if (mysql_num_rows($res) == 0) {
sarebbe meglio che mi dai qualche spiegazione...altrimenti quando imparo!!!
: Re: Login su db
: napo 14 Nov 2006, 16:53:51
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.
: Re: Login su db
: ventoevela 14 Nov 2006, 17:13:26
ok grazie..ora faccio delle prove per vedere se riesco finalmente ad autenticarmi...ci sentiamo presto...ciaoo!!!