Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Inserimento dati: quali funzioni per sicurezza e pulizia

    il metodo per inserire i dati è questo:
    Codice PHP:
        public function insert($nome$cognome$data_nascita$cel$tel$fax$soc$carica$email1$email2$sito$casa$uff) {
            
    //elimino spazi bianchi prima e dopo
            
    $nome trim($nome);
            
    $cognome trim($cognome);
            
    $data_nascita trim($data_nascita);
            
    $cel trim($cel);
            
    $tel trim($tel);
            
    $fax trim($fax);
            
    $soc trim($soc);
            
    $carica trim($carica);
            
    $email1 trim($email1);
            
    $email2 trim($email2);
            
    $sito trim($sito);
            
    $casa trim($casa);
            
    $uff trim($uff);

            
    //eliminno gli slash di php se ci sono
            
    if (get_magic_quotes_gpc ()) {
                
    $nome stripslashes($nome);
                
    $cognome stripslashes($cognome);
                
    $data_nascita stripslashes($data_nascita);
                
    $cel stripslashes($cel);
                
    $tel stripslashes($tel);
                
    $fax stripslashes($fax);
                
    $soc stripslashes($soc);
                
    $carica stripslashes($carica);
                
    $email1 stripslashes($email1);
                
    $email2 stripslashes($email2);
                
    $sito stripslashes($sito);
                
    $casa stripslashes($casa);
                
    $uff stripslashes($uff);
            }

            
    $sql "INSERT INTO contatti (nome, cognome, data_nascita, cellulare, telefono, fax, societa, carica, email_1, email_2, sito_web, indirizzo_casa, indirizzo_uff) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
            try {
                
    $prepare $this->pdo->prepare($sql);
                
    $prepare->execute(array(
                    
    $nome,
                    
    $cognome,
                    
    $data_nascita,
                    
    $cel,
                    
    $tel,
                    
    $fax,
                    
    $soc,
                    
    $carica,
                    
    $email1,
                    
    $email2,
                    
    $sito,
                    
    $casa,
                    
    $uff
                
    ));
                
    header('location:index.php');
            } catch (
    PDOException $e) {
                print 
    "Error!: " $e->getMessage() . "
    "
    ;
                die();
            }
        } 
    questo metodo lo richiamo così:
    Codice PHP:
    <?php
    require_once 'config.php';
    $obj = new Config();
    if (
    $_SERVER['REQUEST_METHOD'] == "POST") {
        
    $insert $obj->insert($_POST['txtName'], $_POST['txtSurname'], $_POST['txtData'], $_POST['txtCell'], $_POST['txtTel'], $_POST['txtFax'], $_POST['txtSocieta'], $_POST['txtCarica'], $_POST['email1'], $_POST['email2'], $_POST['sito'], $_POST['indirizzoCasa'], $_POST['indirizzoUff']);
    }
    ?>
    .....
    volevo capire se ci sono altre funzioni da applicare ai dati per migliorare la sicurezza e la "pulizia" dei dati in arrivo dal form.
    e anche se poi sono gestiti bene.
    purtroppo è un argomento che nn ho mai ben capito perchè in giro ognuno fa i suoi esempi personali.

  2. #2
    nessuno sa darmi un consiglio??

  3. #3
    Beh... ci sono per forza dei metodi migliori: nel tuo script non vedo neanche un controllo di sicurezza, di congruità dei dati né controlli sui caratteri speciali.
    Credo che la classe PDO faccia già dei controlli di suo, ma in effetti, qualcosa per rendere l'applicazione più solida e userfriedly potresti pure mettercelo.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4

  5. #5
    da quanto ho capito PDO prepare nn ha bisogno di mysql_real_escape_string (o almeno così si evince da un libro che ho casa).
    per il resto uso le funzioni trim per levare gli sapzi bianchi e stripslashes per i magic_quotes che poi sono disabilitati quindi nn mi servono neanche.
    mi mancano quindi sono validazione di tipo ed eventuali regex.
    e qui volendo c'è php_filter consigliato da rickystra.

    o per controlli di sicurezza intendi anche altro??

  6. #6
    Una cosa che (per esempio) iou faccio sempre è sostituire tutti i caratteri particolari (lettere accentate, apici vari, caratteri particolari, eccetera) con caratteri tipici del XML.
    Per intenderci: è che diventa & egrave; o simili.
    In questo modo so che non ho troppi problemi di charset nel DB e soprattutto ho codice validato anche XHTML strict in output.
    Non so se PDO faccia una cosa del genere già di suo, per esempio.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    mi sono un pò documentato in giro.
    diciamo che si deve fare il sanitizing, cioà la pulizia/sicurezza, e questo dovrebbe andare:
    Codice PHP:
        public function sanitize($val) {
            
    $val trim($val);
            
    $val htmlentities($val);
            
    $val stripslashes($val);
            
    $val strip_tags($val);
        }

        public function 
    insert($nome$cognome$data_nascita$cel$tel$fax$soc$carica$email1$email2$sito$casa$uff) {
            
    $sql "INSERT INTO contatti (nome, cognome, data_nascita, cellulare, telefono, fax, societa, carica, email_1, email_2, sito_web, indirizzo_casa, indirizzo_uff) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
            try {
                
    $prepare $this->pdo->prepare($sql);
                
    $prepare->execute(array(
                    
    sanitize($nome),
                    
    sanitize($cognome),
                    
    sanitize($data_nascita),
                    
    sanitize($cel),
                    
    sanitize($tel),
                    
    sanitize($fax),
                    
    sanitize($soc),
                    
    sanitize($carica),
                    
    sanitize($email1),
                    
    sanitize($email2),
                    
    sanitize($sito),
                    
    sanitize($casa),
                    
    sanitize($uff)
                ));
                
    header('location:index.php');
            } catch (
    PDOException $e) {
                print 
    "Error!: " $e->getMessage() . "
    "
    ;
                die();
            }
        } 
    nn so se metterci anche mysql_real_escape_string.
    poi si potrebbe seguire la tua pratica di cambiare le parole accentate.
    e infine c'è la validazione, con controllo sul formato email & co, controllo sul titpo, ecc.
    e qui o si fa a mano o si può usare php_filter.

  8. #8
    Originariamente inviato da fermat
    mi sono un pò documentato in giro.
    diciamo che si deve fare il sanitizing, cioà la pulizia/sicurezza, e questo dovrebbe andare:
    Codice PHP:
        public function sanitize($val) {
            
    $val trim($val);
            
    $val htmlentities($val);
            
    $val stripslashes($val);
            
    $val strip_tags($val);
        } 
    Assolutamente no. Ripulire ciecamente i valori non ha senso, non esiste una funzione che vada bene per tutto.
    Perche' usare htmlentities? Solo perche' non si capisce come funzionano i charset? E se poi l'output va inviato a qualcosa che non e' un browser? Cosa ci capira' di "& grave;"? Consiglio di studiare invece di mettere le toppe.
    Stripslashes va usato SOLO se e' attiva l'orrida funzione di PHP che li aggiunge automaticamente (magic quotes), non va usato indiscriminatamente.
    Perche' strip_tags()? E se uno vuole registrare del codice HTML nel database? E' un'operazione perfettamente legittima, no?

    Originariamente inviato da fermat
    nn so se metterci anche mysql_real_escape_string.
    poi si potrebbe seguire la tua pratica di cambiare le parole accentate.
    Di nuovo, assolutamente NO ad entrambe le cose.
    Il punto principale dell'uso dei prepared statements in un'applicazione PHP e' la protezione da SQL injection, quindi perche' usare mysql_real_escape_string? Tantopiu' che non so nemmeno se si possa visto che serve una connessione a mysql e non credo che quella di PDO vada bene.
    Le lettere accentate sono caratteri validi, bisogna considerarli come tali invece di ragionare in codice ASCII 7bit e considerarli come il nemico.

  9. #9
    ok calma nn ti arrabbiare.
    quella funzione l'ho copiata da questo libro http://oreilly.com/catalog/9780596157135/, nn me la sono inventata di sana pianta tanto per fare.

    mi dici di studiare, ok.
    a casa ho tre libri e nessuno spiega niente di tutto ciò, tranne appunto il libro linkato.
    è per questo che ho chiesto.
    mi hai chiarito la situazione del prapare di PDO ed è come avevo detto io.
    visto che poi quasi tutti ormai disabilitano i magic_quotes faccio prima a chiedere magari allo spazio provider.

    per quanto riguarda la questione degli accenti e htmlentities potresti essere un pò più chiaro?
    nn è che nn mi va di studiare, anzi.
    solo che ho detto a inizio discussione ognuno dice la sua e quindi nn riesco a capire come gestire la cosa.

  10. #10
    Per quanto riguarda Unicode ed encoding dei caratteri consiglio la lettura di questo ottimo articolo: http://www.joelonsoftware.com/articles/Unicode.html

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.