Foros del Web » Programando para Internet » PHP »

filtrar datos con mysql_real_escape_string para mysql

Estas en el tema de filtrar datos con mysql_real_escape_string para mysql en el foro de PHP en Foros del Web. Buenas a todo el mundo, Estos dias he estado investigando un poco en foros y webs como mejorar la seguridad de una web frente a ...
  #1 (permalink)  
Antiguo 14/12/2010, 09:43
 
Fecha de Ingreso: abril-2008
Ubicación: BCN
Mensajes: 53
Antigüedad: 16 años
Puntos: 0
filtrar datos con mysql_real_escape_string para mysql

Buenas a todo el mundo,

Estos dias he estado investigando un poco en foros y webs como mejorar la seguridad de una web frente a la inyección de código en consultas e operaciones mysql.

Yo de siempre había utilizado addslashes para escapar caracteres antes de introducir elementos en las base de datos, pero leyendo y leyendo he visto que es menos seguro que si utilizo la instrucción mysql_real_escape_string.

Me he puesto manos a la obra y he empezado a mejorar algunas de las webs que habia creado utilizando mysql_real_escape_string.

Según el manual php "mysql_real_escape_string coloca barras invertidas antes de los siguientes caracteres: \x00, \n, \r, \, ', " y \x1a. "

Esto quiere decir que si yo por ejemplo inserto un elemento a la base de datos por ejemplo:

$nombre="Marcos'" al pasar por el filtro de mysql_real_escape_string en la base de datos se tendria que guardar "Marcos/'".

Pues bien y finalizando, cuando entro un texto lleno de caracteres sensibles a ser escapados por mysql_real_escape_string , tales como \x00, \n, \r, \, ', " y \x1a. Solamente me borra (\) , pero no antepone barras invertidas en ningun caracter.

Mi pregunta és que hago mal o como voy de perdido con éste tema?

Gracias, para facilitar las cosas pongo un código de ejemplo de cómo lo hago.

Código PHP:
function filtrar_datos($valor)
{
   
// Retirar las barras
   
if (get_magic_quotes_gpc()) {
       
$valor stripslashes($valor);
   }
   return 
mysql_real_escape_string($valor);

     
conectar();
     
$result mysql_query("insert into basedatos values
                         ('"
.filtrar_datos($nombre)."','".filtrar_datos($apellidos)."')");
     
desconectar();
     
?> 
Aprovecho para saludarles y gracias
  #2 (permalink)  
Antiguo 14/12/2010, 11:04
 
Fecha de Ingreso: diciembre-2010
Ubicación: Bahía Blanca, Buenos Aires, Argentina
Mensajes: 40
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: filtrar datos con mysql_real_escape_string para mysql

Hola!
yo te recomendaría, que ANTES de llegar a la instancia de ir hasta el servidor, hagas chequeos con javascript, o sea, ahorrate el viaje, y controla los caracteres extraños del lado del cliente. Te hacés una funcioncita en javscript y vas controlando cada campo, por ejemplo, que sea distinto de vacío, que no contenga caracteres extraños, que tenga el formato esperado (por ejemplo: solo dígitos o casilla de correro de la forma [email protected]), etc. De esta forma antes de llegar al servidor tenés todo controlado y en caso de encontrar errores solo necesitás avisarle al usuario lo ocurrido (podés mostrar un cartelito anunciando: "Su nombre posee caracteres extraños")
Espero haberte ayudado :)
Guada
  #3 (permalink)  
Antiguo 14/12/2010, 11:15
 
Fecha de Ingreso: abril-2008
Ubicación: BCN
Mensajes: 53
Antigüedad: 16 años
Puntos: 0
Respuesta: filtrar datos con mysql_real_escape_string para mysql

Buenas Guada,

Gracias por contestar, por lo que he leido la validación de campos mediante Javascript, es bastante vulnerable, delante un ataque, es mejor la validación en el servidor mediante PHP.
De todas formas siempre valido todos los campos antes de subirlos a la bd, ya que creo que como muy bien dices es una muy buena manera de filtrar código malicioso.

Mi duda es más bien durante el proceso de limpieza de datos para subirlos a la bd.

Saludos
  #4 (permalink)  
Antiguo 14/12/2010, 11:20
Avatar de efedefernan  
Fecha de Ingreso: diciembre-2007
Ubicación: Cantabria
Mensajes: 91
Antigüedad: 16 años, 4 meses
Puntos: 11
Respuesta: filtrar datos con mysql_real_escape_string para mysql

Si lo que quieres es evitar problemas de inyección yo creo que lo mejor que puedes hacer es utilizar las consultas a la base de datos utilizando parametros.

Te aconsejo Mysqli.

Un saludo.
  #5 (permalink)  
Antiguo 14/12/2010, 11:37
 
Fecha de Ingreso: abril-2008
Ubicación: BCN
Mensajes: 53
Antigüedad: 16 años
Puntos: 0
Respuesta: filtrar datos con mysql_real_escape_string para mysql

Buenas efedefernan,

Voy a investigar acerca Mysqli, nunca lo he utilizado. Siempre trabajo con mysql

Saludos

Etiquetas: filtrar, mysql
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 00:58.