Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    preservarsi da sql injection

    Ciao ragazzi
    sto creando un'interfaccia grafica per un db che dovrà essere utilizzato solo da chi è presente nella tabella operatori del db e solo l'amministratore può aggiungere manualmente un operatore.
    Da premettere che nella realtà è solo un'interfaccia per un esame.
    So che devo preservare da attacchi di sql injection...
    Credo di doverlo fare solo nel login ovvero nei campi text dell'username e della password.
    Qualcuno puo' darmi qualche dritta?
    Ho letto che dovrei usare una funzione mysql real escape o qualcosa del genere ma come?
    Grazie

  2. #2
    puoi dare un'occhiata alla seguente pillola. Serve pure a quello gestire l'escape delle stringhe.

    http://forum.html.it/forum/showthrea...ostid=10166292

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Io di solito uso mysql_real_escape_string() e sprintf() per le query, ad esempio:

    Codice PHP:
    <?php 
    // nel caso avessi $_POST['user'] e $_POST['pass'] eseguirei cosi la query:

    $query sprintf("SELECT * FROM utente WHERE utente='%s' AND password='%s' ;",
                        
    mysql_real_escape_string($_POST['user']),
                        
    mysql_real_escape_string($_POST['pass']));

    mysql_query($query);

    ?>
    vatti comunque a vedere le funzioni sprintf() e mysql_real_escape_string().

  4. #4
    o, ancora più comodamente

    codice:
    class MySQLDbDriver extends BaseDbDriver
    {
    .
    .
    .
        public function Escape($Value)
        {
            return mysql_real_escape_string($Value, $this->link);
        }
    .
    .
    .
        public function Query($Query)
        {
            // Acquisisce gli argomenti opzionali della funzione (sono i parametri della query)
            // rimuovendo il primo in quanto è la query stessa
            $arguments = func_get_args();
            array_shift($arguments);
            
            // Effettua l'escape degli argomenti
            foreach($arguments as $key => $value)
            {
                $arguments[$key] = $this->Escape($value);
            }
            
            // Costruisce la query inserendo gli argomenti
            $escapedQueryWithArguments = vsprintf($Query, $arguments);
            
            // Esegue la query
            if ($this->isBuffered == true)
            {
                $result = mysql_query($escapedQueryWithArguments, $this->link);
            }
            else
            {
                $result = mysql_unbuffered_query($escapedQueryWithArguments, $this->link);
            }
            
            // Verifica se la query è riuscita
            if ($result === false)
            {
                // Lancia un'eccezione
                throw new SqlQueryException(mysql_errno($this->link), mysql_error($this->link), $escapedQueryWithArguments);
            }
            
            // Operazione riuscita, restituisce la risorsa
            return $result;
        }
    .
    .
    .
    }
    l'ho riscritta qui al volo, quindi potrebbero esserci degli errori, in ogni caso cosi facendo si tutta la gestione parecchio più semplificata e flessibile

  5. #5
    io preferisco usare PDO e i prepared statement.

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.