Domanda

Quali sono i caratteri pericolosi che dovrebbero essere sostituiti nell'input dell'utente quando l'input dell'utente verrà inserito in una query MySQL? Conosco citazioni, virgolette doppie, \ re \ n. Ce ne sono altri?
(Non ho la possibilità di utilizzare un connettore intelligente che accetta parametri, quindi devo creare la query da solo e questo verrà implementato in più linguaggi di programmazione, compresi alcuni oscuri, quindi soluzioni come mysql_real_escape_string in PHP non sono validi)

È stato utile?

Soluzione

mysql_real_escape_string () dai documenti mysql.com:

  

La stringa in from viene codificata in una stringa SQL con escape, tenendo conto del set di caratteri corrente della connessione. Il risultato viene inserito in e viene aggiunto un byte null di terminazione. I caratteri codificati sono NUL (ASCII 0), & # 8220; \ n & # 8221 ;, & # 8220; \ r & # 8221 ;, & # 8220; \ & # 8221 ;, & # 8220; '& # 8221 ;, & # 8220; " & # 8221; e Control-Z (vedi Sezione 8.1, & # 8220; Valori letterali & # 8221;). (A rigor di termini, MySQL richiede solo che la barra rovesciata e il carattere di virgolette utilizzato per citare la stringa nella query siano evitati. Questa funzione cita gli altri caratteri per renderli più facili da leggere nei file di registro.)


mysql_real_escape_string () è consapevole del set di caratteri, quindi replicare tutte le sue abilità (specialmente contro i problemi di attacco multi-byte) non è una piccola quantità di lavoro.

Da http://cognifty.com/blog.entry/id= 6 / addslashes_dont_call_it_a_comeback.html :

AS = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

Feature                                         AS     MRES    ACS
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

Altri suggerimenti

Quali lingue devi supportare? È molto meglio usare la sanificazione integrata di una lingua piuttosto che scriverne una tua.

Modifica: guardando mysql_real_escape_string su php.net:

  

mysql_real_escape_string () chiama la funzione di libreria di MySQL mysql_real_escape_string , che antepone barre rovesciate ai seguenti caratteri: \ x00 , \ n , \ r , \ , ', " e \ x1a .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top