Pregunta

¿Cuáles son los caracteres peligrosos que deben reemplazarse en la entrada del usuario cuando la entrada de los usuarios se insertará en una consulta de MySQL? Sé de comillas, comillas dobles, \ ry \ n. ¿Hay otros?
(no tengo la opción de usar un conector inteligente que acepte parámetros, así que tengo que crear la consulta yo mismo y esto se implementará en varios lenguajes de programación, incluidos algunos desconocidos, por lo que las soluciones como mysql_real_escape_string en PHP no son válidos)

¿Fue útil?

Solución

mysql_real_escape_string () de los documentos de mysql.com:

  

La cadena desde está codificada en una cadena de SQL escapada, teniendo en cuenta el conjunto de caracteres actual de la conexión. El resultado se coloca en y se agrega un byte nulo de terminación. Los caracteres codificados son NUL (ASCII 0), & # 8220; \ n & # 8221 ;, & # 8220; \ r & # 8221 ;, & # 8220; \ & # 8221 ;, & # 8220; '& # 8221 ;, & # 8220; " & # 8221 ;, y Control-Z (consulte la Sección 8.1, & # 8220; Valores literales & # 8221;). (Estrictamente hablando, MySQL solo requiere que la barra diagonal inversa y el carácter de comillas utilizado para citar la cadena en la consulta se escapen. Esta función cita a los otros caracteres para facilitar su lectura en los archivos de registro).


mysql_real_escape_string () es consciente del conjunto de caracteres, por lo que replicar todas sus habilidades (especialmente contra problemas de ataques de múltiples bytes) no es una pequeña cantidad de trabajo.

De 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

Otros consejos

¿Qué idiomas necesitas para tu soporte? Es mucho mejor usar el desinfección incorporado de un idioma que escribir el suyo propio.

Editar: mirando mysql_real_escape_string en php.net:

  

mysql_real_escape_string () llama a la función de la biblioteca de MySQL mysql_real_escape_string , que predispone las barras invertidas a los siguientes caracteres: \ x00 , \ n , \ r , \ , ', " y \ x1a .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top