Quali caratteri mettere con escape quando si fa una query sql?

Quando eseguo una query SQL ho la necessità di ripulire la stringa d'interrogazione da caratteri speciali che potrebbero portare problemi all'istruzione o peggio fare dei seri danni se usati appositamente da utenti male intenzionati (come accade con la SQL injection), io adopero una funzione che inserisce l'escape backslash per i seguenti caratteri:

  • - Sostituisce \ con il doppio \\
  • - Sostituisce il singolo apice ' con \'

Questo è abbastanza per prevenire query malevoli? Ci sono funzioni di libreria apposite che fanno questo?

In Corso 3
MySql 24-05-2018 3 Risposte 4205 Visite 0

Risposte ( 3 approvate )

  1. Giacomo Barrile
    +2
    24-05-2018 11:36:16
    Rispondi

    Il modo migliore in PHP per gestire l'inserimento di una stringa all'interno di un database MySql ed evitare spiacevoli inconvenienti (o peggio) è far uso di questa comprovata funzioncina

    function quote_smart($value) 
    { 
        if (get_magic_quotes_gpc()) 
            $value = stripslashes($value); 
    
        if (!is_numeric($value)) 
            $value = mysql_real_escape_string($value); 
    
        return $value; 
    }

    Il codice è di facile lettura, se le "magic quotes" sono attive (impostate ad on) allora alla stringa viene applicata la funzione stripslashes (la contraria di addslashes), se non lo sono ed il valore non è numerico applica la mysql_real_escape_string che inserisce gli Escape nei caratteri opportuni.

  2. Giorgio Borelli
    +1
    24-05-2018 11:22:20
    Rispondi

    I caratteri potenzialmente dannosi in una query sql non si limitano ai pochi che hai elencato, ed è meglio far fare questo lavoro ad apposite funzioni di libreria che trattano in maniera opportuna la quasi totalità dei casi, ad es. in PHP trovi

    • mysql_real_escape_string
    • addslashes
  3. Giorgio Borelli
    0
    24-05-2018 11:43:51
    Rispondi

    Altri potenziali caratteri dannosi nell'inserimento di stringhe nel database, spesso usati per fare sql injection sono il punto e virgola ";" ed i commenti sql "--" e "/* ... */"

    Quindi fai attenzione anche a questi e trattali opportunamente come sequenze di escape anteponendogli lo backslash "\"

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

Gaspare Buturrà

Gaspare Buturrà

Autore di questa domanda

 Domanda Precedente

 Elenco Domande 

Domanda Successiva