Visualizzazione dei risultati da 1 a 9 su 9

Discussione: verifica codice

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255

    verifica codice

    salve ragazzi alcune volte capita che non vedo i dati corretti...come mai???
    da questo script arrivo dopo essermi loggato ed inserito user e pass....eseguo una query che mi stampa una serie di dati...molto raramente in 2 mesi mi sarà capitato circa 2 volte che quando mi collego con una user e pass invece di farmi vedere i dati dell'utente loggato, mi fa vedere i dati di un altro utente.
    com'è possibile?inoltre sembra tutto corretto nel codice.
    Codice PHP:
    <?
    session_start
    ();
    require 
    "inc/settings.php";
    require 
    "inc/functions.php";
    CheckUtente();
    $id_utenti $_SESSION["id"];


    if (
    $_SESSION["tipo"] == "utenti")
    {
        
    $query "SELECT * FROM utenti WHERE id_utenti = ".$id_utenti."";
        
    $result mysql_query($query) or die(mysql_error());
        if (
    mysql_num_rows($result) > 0)  
        {
        
    $utenti mysql_fetch_assoc($result);
        
    $A=$utenti["cod_cliente"];
        
    $query_log "INSERT INTO log_accessi (cod_cliente,ip_address,tipologia,data_accesso) 
        VALUES ('"
    .$A."','".$_SERVER['REMOTE_ADDR']."','".$_SESSION["tipo"]."',NOW())";
        
    mysql_query($query_log) or die(mysql_error());
        }
    }
    else 
    {
    header("location:login.php");
    }

    include 
    "header.php";
    ?>
    ...
    <div class="dialogMiddleCenterInner dialogContent">
    </div>
      <table class="frame" border="0" cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td><div class="scrollablecontent">
                <table class="tablemodel">
                  <tbody>
                    <tr>
                      <td class="tablemodelheader">Periodo</td>
                      <td class="tablemodelheader">Data</td>
                      <td class="tablemodelheader">Importo (€)</td>
                      <td class="tablemodelheader">Fattura</td>
                    </tr>
                    <?
    if ($_SESSION["tipo"] == "utenti")
    {
        
    $query "SELECT * FROM utenti WHERE id_utenti = ".$id_utenti."";
        
    $result mysql_query($query) or die(mysql_error());
        if (
    mysql_num_rows($result) > 0)  
        {
            
    $utenti mysql_fetch_assoc($result);
            
    $A=$utenti["cod_cliente"];
            
    $query1 "SELECT * FROM lettura WHERE lettura.codice = '".$A."'";
            
    //id_pdf = ".$_SESSION["id"]." AND ORDER BY id_pdf";    
            
    $result1 mysql_query($query1) or die(mysql_error());
            if (
    mysql_num_rows($result1) > 0
            {
                while (
    $fattura mysql_fetch_assoc($result1)) 
                {
                
    ?>
                    <tr>
                      <td class="cellmodel"><?=$fattura["periodo_fattura"]?></td>
                      <td class="cellmodel"><?=date("d/m/Y",strtotime($fattura["data_emissione"]))?></td>
                      <td style="text-align: right;" class="cellmodel"><span class="importo"><?=$fattura["importo"]?>&nbsp;</span></td>
                      <td style="text-align: right;" class="cellmodel">
                      <? $pdf_old $fattura["directory"]."/".$fattura["fattura"].".pdf";?>
                      <?
                       
                        $fattura_mod 
    substr($fattura["fattura"], 4); 
                        
    $fattura_anno substr($fattura["fattura"], 0,); 
                        
    $fattura_completo $fattura_anno."/".$fattura_mod;
                      
                          
    $pdf_completo $fattura["fattura"].".pdf";
                        
    $pdf_completo_percorso $fattura["directory"]."/".$fattura["fattura"].".pdf";
                        
    $pdf_percorso $fattura["directory"]."/";
                        
    $pdf_completo_rin $pdf_completo_percorso;
                        
    $sub1 substr($pdf_completo_rin0,-4);
                        
    $sub_cc $sub1."_cc".".pdf";
                        
    $pdf_completo_cc $fattura["fattura"]."_cc.pdf";
                          
                       
                        
    ?>
                  <a href="uploadit.php?nome_file=<?=$pdf_completo_cc?>&percorso=<?=$pdf_percorso?>" target="_blank"><?=$fattura_completo?></a>
                    </tr>
                    <?
                
    }
                
    ?>
                  </tbody>
                </table>
            </td>
          </tr>
          <tr></div>
            <td class="framefooter"><table class="footercontent">
                <tbody>
                  <tr>
    saluti

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    ragazzi inoltre volevo aggiungere che tale anomalia mi è stata segnalata, ma non mi è mai capitata personalmente.
    quello che mi chiedo ma può capitare che mi loggo con i miei dati ed è tutto ok, si logga un mio amico e vede altri dati del db a lui non corrispondenti, poi si rilogga e tutto torna normale.
    in pratica alcune volte il codice funzionante sembrerebbe non funzionare....vi è mai capitato?
    saluti

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai guardato lo script che setta l'array $_SESSION ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    dovresti guardare bene come funziona CheckUtente();
    Il codice può essere ottimizzato .. tipo non fare due volte la stessa query..
    Nella query potresti imporre la corrispondenza su più parametri oltre che all'id dell'utente sempre che non sia l'unica cosa che lo identifichi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    ecco la funzione check
    Codice PHP:
    function CheckUtente() {

        if (!
    $_SESSION["tipo"]) {
            
    session_destroy;
            
    header("location:login.php");
        }

    ok ora faccio una sola volta la query e lo cambiata in questo modo,cosa ne pensi?

    Codice PHP:
    if ($_SESSION["tipo"] == "utenti")
    {
        
    $query "SELECT * FROM utenti WHERE id_utenti = ".$id_utenti." and cod_cliente =  ".$Autenti."";
        
    $result mysql_query($query) or die(mysql_error());
        if (
    mysql_num_rows($result) > 0)  
        {
            
    $utenti mysql_fetch_assoc($result);
            
    $A=$utenti["cod_cliente"];
            
    $query_let "SELECT * FROM lettura WHERE lettura.codice = '".$A."'";
            
    $result_let mysql_query($query_let) or die(mysql_error());
            if (
    mysql_num_rows($result_let) > 0
            {
                while (
    $fattura mysql_fetch_assoc($result_let)) 
                { 
    sperando che non capiti più...

  6. #6
    Check è un po' povera.. oltre all'essere impostata la variabile tipo dovrebbe essere verificata tra quelle possibili..
    Così va meglio.. controlla comunque lo script che gestisce l'autenticazione e l'impostazione della variabili di sessione

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    ecco lo script di login
    Codice PHP:
    <?
    session_start
    ();
    require 
    "inc/settings.php";
    require 
    "inc/functions.php";
    CheckUtente();

    $cod_cliente $_POST["cod_cliente"];
    $password $_POST["password"];
    if (
    $password == ""
    {
            
    //nuovi inscritti
            
    $conferma_reg 0;
            
    $a"";
            
    $cod_fiscale ="";
            
    $key"";
            
    $query "SELECT id_utenti FROM utenti WHERE utenti.cod_cliente = '".$cod_cliente."' AND utenti.email = '".$a."' 
            AND utenti.conferma_reg = '"
    .$conferma_reg."' AND utenti.cod_fiscale NOT LIKE '".$cod_fiscale."'";
            
    $result mysql_query($query);      
            if (
    mysql_num_rows($result) > 0)     //restituisce il numero di righe del  risultato  
            
    {
                
    $inscritto mysql_fetch_assoc($result);
                
    $_SESSION["tipo"] = "inscritto";
                
    $_SESSION["id"] = $inscritto["id_utenti"];
                
    $_REQUEST["cod_cliente"] = $inscritto["cod_cliente"];
                
    $Autenti=$inscritto["cod_cliente"];
                
    $query_log "INSERT INTO log_accessi (cod_cliente,ip_address,tipologia,data_accesso) 
                VALUES ('"
    .$Autenti."','".$_SERVER['REMOTE_ADDR']."','".$_SESSION["tipo"]."',NOW())";
                
    mysql_query($query_log) or die(mysql_error());
            }
            else
            {
                
    //nuovi inscritti che hanno il cod fiscale NULL
                
    $conferma_reg 0;
                
    $cod_fiscale "";
                
    $a"";
                
    $query "SELECT id_utenti FROM utenti WHERE utenti.cod_cliente = '".$cod_cliente."' AND utenti.email = '".$a."'
                AND utenti.conferma_reg = '"
    .$conferma_reg."' AND utenti.cod_fiscale like '".$a."'";
                
    $result mysql_query($query);      
                if (
    mysql_num_rows($result) > 0)     //restituisce il numero di righe del  risultato  
                
    {
                    
    $inscritto mysql_fetch_assoc($result);
                    
    $_SESSION["tipo"] = "inscritto_codice";
                    
    $_SESSION["id"] = $inscritto["id_utenti"];
                    
    $_REQUEST["cod_cliente"] = $inscritto["cod_cliente"];
                    
    $Autenti=$inscritto["cod_cliente"];
                    
    $query_log "INSERT INTO log_accessi (cod_cliente,ip_address,tipologia,data_accesso) 
                    VALUES ('"
    .$Autenti."','".$_SERVER['REMOTE_ADDR']."','".$_SESSION["tipo"]."',NOW())";
                    
    mysql_query($query_log) or die(mysql_error());
                }    
                
    mysql_free_result($result);
                
    //nuovi inscritti che hanno già provato la registrazione
                
    $conferma_reg 0;
                
    $cod_fiscale ="";
                
    $a"";
                
    $query "SELECT id_utenti FROM utenti WHERE utenti.cod_cliente = '".$cod_cliente."' AND utenti.email <> '".$a."'
                AND utenti.conferma_reg = '"
    .$conferma_reg."' AND utenti.cod_fiscale NOT LIKE '".$cod_fiscale."'";
                
    $result mysql_query($query);      
                if (
    mysql_num_rows($result) > 0)     //restituisce il numero di righe del  risultato  
                
    {
                    
    $inscritto mysql_fetch_assoc($result);
                    
    $_SESSION["tipo"] = "inscritto";
                    
    $_SESSION["id"] = $inscritto["id_utenti"];
                    
    $_REQUEST["cod_cliente"] = $inscritto["cod_cliente"];
                    
    $Autenti=$inscritto["cod_cliente"];
                    
    $query_log "INSERT INTO log_accessi (cod_cliente,ip_address,tipologia,data_accesso) 
                    VALUES ('"
    .$Autenti."','".$_SERVER['REMOTE_ADDR']."','".$_SESSION["tipo"]."',NOW())";
                    
    mysql_query($query_log) or die(mysql_error());
                }    
                
    mysql_free_result($result);
            }
            
    mysql_free_result($result);
    }
    else if (
    $password != "")
    {    
        
    $query "SELECT id_admin FROM admin WHERE user = '".$cod_cliente."' AND password = '".md5($password)."'";
        
    $result mysql_query($query);      //fai query al db
        
    if (mysql_num_rows($result) > 0)     //restituisce il numero di righe del  risultato  
        
    {
            
    $admin mysql_fetch_assoc($result);    //riga del risultato come array associativo tipo e id
            
    $_SESSION["tipo"] = "amministratore";
            
    $_SESSION["id"] = $admin["id_admin"];
        }
        else 
        {
            
    // controllo se è utenti
            
    $conferma_reg 1;
            
    $query "SELECT * FROM utenti WHERE cod_cliente = '".$cod_cliente."' AND password = '".md5($password)."' 
            AND utenti.conferma_reg = '"
    .$conferma_reg."'";
            
    $result mysql_query($query);
            if (
    mysql_num_rows($result) > 0)     //restituisce il numero di righe del  risultato  
            
    {
                
    $utenti mysql_fetch_assoc($result);    //riga del risultato come array associativo tipo e id
                
    $query_update "UPDATE utenti SET ipaddress = '".$_SERVER['REMOTE_ADDR']."', data = NOW() WHERE cod_cliente = '".$utenti["cod_cliente"]."'";
                
    mysql_query($query_update) or die(mysql_error());  //restituisce la riga dell'errore
                
    $_SESSION["tipo"] = "utenti";
                
    $_SESSION["id"] = $utenti["id_utenti"];
                
    $Autenti=$utenti["cod_cliente"];
                
    $query_log "INSERT INTO log_accessi (cod_cliente,ip_address,tipologia,data_accesso) 
                VALUES ('"
    .$Autenti."','".$_SERVER['REMOTE_ADDR']."','".$_SESSION["tipo"]."',NOW())";
                
    mysql_query($query_log) or die(mysql_error());
            }
            
    mysql_free_result($result);
            
    // controllo se è enti
            
    $query ="SELECT id_utenti FROM enti WHERE user = '".$cod_cliente."' AND password = '".md5($password)."'";
            
    $result mysql_query($query);
            if (
    mysql_num_rows($result) > 0
            {
                
    $enti mysql_fetch_assoc($result);
                
    $_SESSION["tipo"] = "enti";
                
    $_SESSION["id"] = $enti["id_utenti"];
            }
            
    mysql_free_result($result);      //Libera la memoria occupata dal risultato
        
    }
    }
    else
    {
            
            
    //mysql_free_result($result);
    }
        
    if (
    $_SESSION["tipo"] == "amministratore"
    {
        
    header("location:mailing.php");
    }
    else if(
    $_SESSION["tipo"] == "utenti")
    {
        
    header("location:elenco.php");
    }
    else if(
    $_SESSION["tipo"] == "enti" )
    {
        
    header("location:storico.php");
    }
    else if(
    $_SESSION["tipo"] == "inscritto")
    {
        
    //header("location:iscrizione.php?cod_cliente=$cod_cliente");
        
    header("location:iscrizione.php");
    }
    else if(
    $_SESSION["tipo"] == "inscritto_codice")
    {
        
    header("location:iscrizione_part.php");
    }
    else 
    {
        
    session_destroy();
        
    header("location:login.php?feedback=1");
        
    //header("location:login.php");
    }
    ?>

  8. #8
    All'inizio fa' paura !

    Mettere direttamente le variabili POST nella query senza filtrarle è pericolosissimo. Non dare il tuo sito web perchè è esposto a seri rischi di sicurezza ! Spero per te che non lo conosca nessuno...
    Leggiti qualcosa sulle SQL injection !
    Poi magari ci si ragiona..

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    ok...grazie del consiglio
    e come fare per renderlo sicuro???

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.