Ver Mensaje Individual
  #16 (permalink)  
Antiguo 11/04/2011, 22:05
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Desacuerdo Respuesta: Basta con esto o se necesita algo mas?

Hola,

Cita:
Iniciado por RichBoy Ver Mensaje
... ahora si que no se asta donde o cuanto es lo que se tiene que hacer para evitar ataques inyecciones MySQL, acaso es tan difícil? como validarías tu HackmanC, un insert como el que se hace al responder a un tema aquí en foros del web????? yo puedo decirte como yo lo haria, pero que mejor alguien que esta mas avanzado en el tema...
Primero, que tan avanzado en el tema esté no lo puedo saber, no hay una medida de cuanto sabes sobre algo, yo simplemente trato de aprender todo lo que pueda o me sea posible para ejercer mejor mi profesión de programador.

Pero el problema de la inyección SQL es realmente complicado, depende de las prácticas de programación que tengas. Así por ejemplo, un post en un foro podría ser validado simplemente con mysql_real_escape_string, y posiblemente estaría a salvo del problema en cuestión, no así de otros problemas.

Código PHP:
$mensaje $_POST['mensaje'];
$mensaje mysql_real_escape_string($mensaje);
$sql "INSERT INTO mensajes VALUES '$mensaje'"
Las posibilidades que alguien logre inyectar código con el ejemplo anterior son casi nulas, aunque depende de otros errores del programador o administrador del sitio. ¿Que podría sucedería con el problema anterior si estuviera la variable del sistema magic_quotes_gpc establecida en ON?.

Básicamente es la complejidad del problema lo que convierte algo fácil en un problema difícil de resolver. Y acá solo hablamos de inyección SQL, no así de Javascript u otros.

¿Como resuelvo personalmente estos problemas? Me imagino mentalmente todas las posibilidades que podrían venir en el POST y me imagino el resultado que podría obtener si alguien mas lo hace. Intento con todas las cosas mas absurdas que nunca podrían suceder, y espero que las que no se me ocurrieron nunca sucedan.

Pero para eso me sé la tabla ASCII de memoria, conozco como es la estructura de todas las instrucciones SQL casi perfectamente, conozco para qué sirve la comilla, la comilla doble, el backtick, la diagonal, la diagonal invertida y todos los demás caracteres, inclusive el caracter null (0). Conozco bien como funcionan los browsers, como mandan los POST, como se reciben, que codificación de caracteres usan, y como la procesa PHP.

Y me imagino todas las combinaciones de estos que se me ocurran aplicados a mi programa, lógicamente intentando producir el resultado 'no deseado'. Y por último busco como evitarlo.

Saludos,

Última edición por HackmanC; 11/04/2011 a las 22:20 Razón: agregar algo