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();
?>