Visualizzazione dei risultati da 1 a 7 su 7

Discussione: sicurezza codice

  1. #1

    sicurezza codice

    Salve a tutti,

    stavo verificando uno script che utilizzo e mi sono reso conto che qualcosa non torna.

    Così come è impostato, il ciclo foreach verifica e fa qualcosa oppure è vuoto? La mia impressione è che sia errato.

    Ecco il codice in questione:

    Codice PHP:
       //recupero informazioni da ... 

        
    if (isset($_POST['posted2'])) {
        
    //$idob = $_POST['objectID'};
        //$categoria = $_POST['categoria'];
        
    $idcat $_POST['idcat'];
        
    $subcat $_POST['idsub'];
        
    $subcategoria $_POST['subcategoria'];
        
    $articolo $_POST['articolo'];
        
    $descrizione $_POST['descrizione'];
        
    $dettaglio $_POST['dettaglio'];
        
    $prezzo $_POST['prezzo'];
        
    $sconto $_POST['sconto'];
        
    $immagine $_FILES['userfile']['name'];
        
    $immagine2 $_FILES['userfile2']['name'];
        
    $immagine3 $_FILES['userfile3']['name'];
        
    $thumb $_FILES['userfile']['name'];
        
    $promozioni $_POST['promozioni'];
        
    $novita $_POST['novita'];
        
    $esclusivo $_POST['esclusivo'];
        
        
    $nn explode("-",$idcat);
                        
    $idx $nn[0];
                        
    $ID $nn[1];
                        
                        
                    
    $cc explode("-",$subcat);
                        
    $sub $cc[0];
                        
    $subID $cc[1];
                        
    $subcategoria $cc[2];    
                        
                        
    //echo "$idx 
     
    $ID 
     $sub 
     $subID
    ";

        //CODICE FOREACH IN ESAME 

    foreach (
    $_POST as $key => $value) { 
        
    $_POST[$key] = mysql_real_escape_string(htmlentities(htmlspecialchars(trim($value)))); 
      } 
     
    // HO AGGIUNTO QUESTI CONTROLLI CHE FUNZIONANO PERFETTAMENTE
      
    $articolo = mysql_real_escape_string(htmlentities(htmlspecialchars(trim($articolo))));
    $descrizione = mysql_real_escape_string(htmlentities(htmlspecialchars(trim($descrizione))));
    $dettaglio = mysql_real_escape_string(htmlentities(htmlspecialchars(trim($dettaglio))));

      
    $percentuale = ($prezzo*$sconto)/100;
      
    $prezzoscontato = ($prezzo-$percentuale);
      
      //sezione dedicata alla pulizia stringa immagine
      
    $immagine = str_replace (" ", "", $immagine);
      
    $immagine = str_replace ("%20", "", $immagine);
      
    $immagine = str_replace ("", "", $immagine);
        
    $immagine2 = str_replace (" ", "", $immagine2);
      
    $immagine2 = str_replace ("%20", "", $immagine2);
        
    $immagine3 = str_replace (" ", "", $immagine3);
      
    $immagine3 = str_replace ("%20", "", $immagine3);
      
    $thumb = str_replace (" ", "", $thumb);
       
    $thumb = str_replace ("%20", "", $thumb);
       
    $thumb = str_replace ("", "", $thumb);

      //inserimento dati su tabella
    $query="INSERT INTO $tabarticoli (ID,objectID,idcat,idsub,subcategoriaarticolo,descrizione,dettaglio,prezzo,sconto,immagine,immagine2,immagine3,thumb,promozioni,novita,esclusivoVALUES ('$idx','$subID','$ID','$sub','$subcategoria','$articolo','$descrizione','$dettaglio','$prezzoscontato','$sconto','$immagine','$immagine2','$immagine3','$thumb','$promozioni','$novita','$esclusivo')";

    $result = mysql_query($query,$db) or die (mysql_error()); 


    if(
    $result) {
    echo "
    articolo inserito";
    echo "
    ";
    echo '<script>alert("
    Articolo aggiunto");
                  location="
    articoli.php";    
                  </script>';
    }else{
    echo "
    articolo non inserito";
    }
    }
    }
        
      ?> 
    Ho inserito le sezioni precedenti e successive al foreach per analizzare il contesto...

    Grazie.

  2. #2
    Ciao,
    il foreach viene eseguito... solo che dovresti farlo prima di assegnare i vari dati dell'array $_POST alle singole variabili... altrimenti è inutile.


    Puoi "semplificarlo" un pò passando per riferimento il value:
    Codice PHP:
    if (isset($_POST['posted2'])) { 
     
       foreach (
    $_POST as &$value) {  
         
    $value mysql_real_escape_string(htmlentities(htmlspecialchars(trim($value))));  
        }

       
    $idcat $_POST['idcat']; 
       
    $subcat $_POST['idsub']; 

       .... 
    Curiosità: htmlentities e htmlspecialchars, perchè entrambi? htmlentities col parametro opzionale ENT_QUOTES dovrebbe esser sufficiente...
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  3. #3
    uhm...

    adesso il contenuto del testo quando lo richiamo da mysql è ...


    &lt;p&gt; Qui stiamo inserendo del testo per vedere cosa succede&lt;/p&gt;...


    malgrado abbia utilizzato strip_tags...

    perché?

  4. #4
    strip_tags rimuove i tag... non interagisce con le entità html.
    A te servono:
    htmlspecialchars_decode()
    html_entity_decode()
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  5. #5

  6. #6
    La sicurezza non si ottiene buttando li' funzioni a caso. Questo pezzo di codice ad esempio e' follia pura:
    codice:
    $articolo = mysql_real_escape_string(htmlentities(htmlspecialchars(trim($articolo))));
    htmlentities e htmlspecialchars sono funzioni che hanno un uso specifico e quell'uso non e' preparare i dati per inserirli in un database. htmlspecialchars serve per mostrare codice HTML in una pagina senza che venga interpretato, e htmlentities serve per trasformare alcuni caratteri nelle loro entita' HTML (e - ad esempio - NON VA usato per far funzionare le accentate al posto del charset corretto). Senza contare il fatto che usandole entrambe codifichi le cose due volte.

    Per INSERIRE i dati nel database ed evitare problemi, usa mysql_real_escape_string() o - meglio - usa PDO.

  7. #7

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 © 2024 vBulletin Solutions, Inc. All rights reserved.