Foros del Web » Programando para Internet » PHP »

Evitar Inyección SQL en campos de texto

Estas en el tema de Evitar Inyección SQL en campos de texto en el foro de PHP en Foros del Web. Buenas gente, a ver si pueden darme una mano. Necesito filtrar posibles inyecciones SQL en un campo de texto, texto que será almacenado en una ...
  #1 (permalink)  
Antiguo 08/09/2011, 08:04
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Pregunta Evitar Inyección SQL en campos de texto

Buenas gente, a ver si pueden darme una mano. Necesito filtrar posibles inyecciones SQL en un campo de texto, texto que será almacenado en una base datos. No puedo filtrar las palabras reservadas de SQL por que son palabras que posiblemente se usen realmente como parte del texto, y he visto inyecciones sql que no usan comillas así que con escapar comillas no me es suficiente, además es posible que también se usen símbolos % -- etc, por lo cual no puedo filtrarlos.

Como puedo encarar el tema? hay alguna manera de que al concatenar la variable con el texto a la consulta de update o insert, mantener el texto tal cual evitando la inyección SQL?
  #2 (permalink)  
Antiguo 08/09/2011, 08:17
Avatar de blakmetall  
Fecha de Ingreso: diciembre-2010
Ubicación: Jalisco
Mensajes: 181
Antigüedad: 13 años, 11 meses
Puntos: 18
Respuesta: Evitar Inyección SQL en campos de texto

el mysql_real_escape_string($campo), no te funciona??? con ese se escapan los caracteres especiales.
  #3 (permalink)  
Antiguo 08/09/2011, 09:01
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 9 meses
Puntos: 53
Respuesta: Evitar Inyección SQL en campos de texto

podrias poner un ejemplo de que es lo quieres realizar?
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #4 (permalink)  
Antiguo 08/09/2011, 09:24
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: Evitar Inyección SQL en campos de texto

http://php.net/manual/es/function.my...ape-string.php
Nota: mysql_real_escape_string() no escapa % y _. Estos son comodines en MySQL que se combinan con LIKE, GRANT, o REVOKE.

El manual dice que no se escapan, no entiendo, estas seguro que los escapa, como dije, he visto inyecciones que son muy complejas y que no usan comillas, pero usan caracteres especial.

Basicamente el campo de texto se usaria para enviar mensajes entre usuarios. Los mensajes pueden ser de cualquier tipo y pueden ser en ingles, por lo tanto no puedo filtrar select drop etc, tampoco puedo filtrar simbolos especiales como & o %. Si un usuario quiere enviar justamente un ejemplo de inyeccion sql, como hago para que la inyeccion sql se mantenga como texto?

Como se hace en los foros para evitar la inyeccion sql en los post? simplemente usan mysql_real_escape_string()???
  #5 (permalink)  
Antiguo 08/09/2011, 09:34
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 9 meses
Puntos: 53
Respuesta: Evitar Inyección SQL en campos de texto

tal vez esto ayude
Cita:
$SQL = addslashes($SQL);
$stmt="INSERT INTO mi_tabla set conversacion=\"$SQL\";";
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #6 (permalink)  
Antiguo 08/09/2011, 09:44
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: Evitar Inyección SQL en campos de texto

Cita:
Iniciado por PIRRUMAN Ver Mensaje
tal vez esto ayude
Que es lo mismo que usar mysql_real_escape_string(). De todas formas no me convence que sea eso lo que usan en el caso de los post.
  #7 (permalink)  
Antiguo 08/09/2011, 10:57
 
Fecha de Ingreso: septiembre-2011
Mensajes: 16
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Evitar Inyección SQL en campos de texto

si quires que te ayudemos trata de darnos ejemplos reales, para ver el codigo y poder ayudarte, solo con sprintf y mysql_real_escape_string creo que es ya suficiente
  #8 (permalink)  
Antiguo 08/09/2011, 11:02
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: Evitar Inyección SQL en campos de texto

El ejemplo real viene a ser un post en un foro como los de este foro, donde uno mete codigo (por poner un ejemplo, una inyeccion sql) y esta se guarda como texto sin afectar nada.
  #9 (permalink)  
Antiguo 08/09/2011, 11:17
 
Fecha de Ingreso: septiembre-2011
Mensajes: 16
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Evitar Inyección SQL en campos de texto

mysql_set_charset(CODIFICACION,$conexion);
if(get_magic_quotes_gpc()==1)
$query="insert into noticia values(null,'$titulo','$cuerpo','$foto','$fecha',' $tipo','$usuario')";
else
$query = sprintf("insert into noticia values(null,'%s','%s','$foto','$fecha','$tipo','$u suario')",mysql_real_escape_string($titulo),mysql_ real_escape_string($cuerpo));

supongamos que meto en cuadro de texto titulo esto ');select * from noticia;

imprimiria una ves abierta la noticia esto : ');select * from noticia;
  #10 (permalink)  
Antiguo 08/09/2011, 11:29
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: Evitar Inyección SQL en campos de texto

Gracias, entonces eso es lo que me estaba faltando, usar el sprintf. Gracias.

Etiquetas: campos, inyección, sql, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:26.