Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2010, 09:43
popi
 
Fecha de Ingreso: abril-2008
Ubicación: BCN
Mensajes: 53
Antigüedad: 16 años, 9 meses
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