[hack] PHP

Giorgia isaacasimov_sf@tin.it
Mer 12 Maggio 2004 11:10:33 CEST


Alle 19:40, martedì 11 maggio 2004, John Doe ha scritto:
> > Giorgia <isaacasimov_sf@tin.it> ha scritto:
> > > Ragazzi c'è qualcuno in lista che sa programmare in PHP e può dare
> > > qualche consiglio ad una newbie imbranata che si sta incasinando la
> > > vita?
> >
> > Io nn lo conosco bene, però se posti il problema magari una dritta
> > qualcuno riesce a dartela.
> >
> Dipende da cosa devi fare, ho delle conoscenze ma limitate a "devo fare
> questo, come faccio?" :P

Ci provo. Dovrebbe essere una cosa abbastanza banale.
Però questa mail sarà lunghina (ehm).
Allora: devo fare un sito dinamico dove si accede tramite login (eh :)).
I vari script sono ovviamente incasinati da una serie di roba HTML, quindi vi 
posto solo le cose importanti.
Questo è il "sunto" dello script che viene incluso in quasi tutte le pagine e 
che contiene poi tutti i dati per la connessione al DB. Troverete un user 
"controllore" che ha solo i privilegi necessari per controllare user e 
password e di cui poi non ci interessa più nulla e la cui connessione verrà 
chiusa. clname è il cliente e owname è un owner con qualche privilegio in più 
sul DB. 

(file di nome include/secret.php)

<?php
function connetti($permessi)
{
        $genUser="genuser";
        $genPass="genpass";
        $ClName="clname";
        $ClPass="clpass";
        $OwName="owname";
        $OwPass="owpass";

        switch($permessi)
        {
        case "controllore":
          $con=@mysql_connect($HTTP_HOST,$genUser,$genPass);
          break;
        case "cliente":
          $con=@mysql_connect($HTTP_HOST,$ClName,$OwName);
          break;
        case "owner":
          $con=@mysql_connect($HTTP_HOST,$OwName,$OwPass);
          break;
        default:
          $con=-1;
          break;
        }

        if($con!=-1)
          @mysql_select_db("aidaVideo");
        return $con;
}
?>

Ecco la sezione per il login, che funziona alla perfezione:

(file di nome login.php)

<?php
   session_start();
   require("include/secret.php");
if(!$nome || !$password)
   {
    Qui implemento un messaggino d'errore, cmq il vero controllo iniziale 
avverrà a livello JavaScript   
   }
else
   {
   $nome=addslashes("$nome");
   $password=addslashes("$password");
   $k0=connetti("controllore");
   if($k0==-1)
      {
       Implemento un altro messaggio di errore, vabbé :)
      }
   else
      {
      $sql='SELECT username,password,tipologia,id FROM clienti WHERE 
username="'.$nome.'" AND password="'.$password.'"';
      $result=mysql_query($sql);
      $row=mysql_fetch_array($result);
      if($row[0]==$nome && $row[1]==$password)
         {
         if($row[2]=="cliente" || $row[2]=="fornitore")
            {
            $k1=connetti("cliente");
            if($k1==-1)
               {
		Ennesimo messaggino d'errore...
                }
... insomma continua, e funziona: assegna poi a $_SESSION varie cose che 
voglio mantenermi durante la sessione, così:
               $_SESSION['loggato']=1;
               $_SESSION['permessi']="cliente";
               $_SESSION['id']=$row[3];
               $_SESSION['user']=$row[0];

Eccoci adesso alla parte incriminata.
Qui ci sono due script, uno che è chome.php, dove in realtà c'è solo uno 
"scheletro" html con qualche funzioncina che mi serve per scrivere Benvenuto 
Tizio e cavolate del genere. Vi posto l'incipit giusto per conoscenza:

(file di nome chome.php)
   session_start();
   if($_SESSION['loggato']==1 && $_SESSION['permessi']=="cliente")
   {
      echo '<div class="intestazionesx"><p>Benvenuto 
'.$_SESSION['user'].'!</p></div>
   require("cvideo.php");
   }
   else
   {
    Messaggino che avverte che non si hanno i permessi per accedere all'area 
riservata... ok, niente di che :)
   }

Ma eccoci allo script che mi dà problemi, e che è incluso nel precedente 
ovvero il cvideo.php:

(file di nome cvideo.php)

<?php

        if($_SESSION['loggato']==1)
        {
        session_start();
        require("include/secret.php");
        $k=connetti("cliente");
        $sql="SELECT video.titolo, testata.descrizione, testata.edizione, 
edizione.data, video.coda, video.path FROM video, testata, edizione, 
cntr_video WHERE video.id_cliente=".$_SESSION['id']." AND 
video.id_testata=testata.id AND video.id_edizione=edizione.id AND 
cntr_video.id_cliente=".$_SESSION['id']." ORDER BY edizione.data";
        $result=mysql_query($sql);
        $row=mysql_fetch_array($result);
        }
	//c'è tanta altra roba implementata, ma si tratta di html e comunque 
funzionano tutte.

Ecco, in quest'ultimo script ci dovrebbe essere l'errore. Facendo login e 
entrando nella pagina, mi viene scritto:
Warning: mysql_query(): Access denied for user: 'apache@localhost' (Using 
password: NO) in /var/www/html/aida/cvideo.php on line 17
Warning: mysql_query(): A link to the server could not be established in 
/var/www/html/aida/cvideo.php on line 17
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result 
resource in /var/www/html/aida/cvideo.php on line 18

Perchè? Dove sbaglio? Lo so che è di sicuro una cavolata immonda...
Voi sapete?
Invece di farmi la connessione prendendo connetti("cliente"), tenta di 
connettermi con Apache. Ho fatto diverse prove, cambiando tante cose (prima 
tentavo una pconnect e via dicendo) ma l'errore è sempre il solito e quindi 
lo sbaglio è il MIO!
Che rabbia :)

-- 
Giorgia

_________________________________________________

La letteratura è ciò che amo di più.
Ma in questo momento avverto una
sorta di panico, di urgenza.
Sento il bisogno impellente di dare il
mio contributo contro la globalizzazione.
Per cambiare questo mondo.
(Arundhati Roy)
_________________________________________________




Maggiori informazioni sulla lista golem-hack