Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: USUARIO_DE_SOFTWARE_LIBRE en 28 Agosto 2009, 01:50 am



Título: mysql_real_escape_string no es suficiente
Publicado por: USUARIO_DE_SOFTWARE_LIBRE en 28 Agosto 2009, 01:50 am
Hola. Siempre uso la función mysql_real_escape_string() de PHP para evitar inyecciones sql, entonces la uso en todas las variables $_GET y $_POST.
Me acabo de dar cuenta de que esta función permite inyección de código que no tiene comillas simples no dobles, por ejemplo:
http://ejemplo.com/index.php?id=%274
El "%274"  vale lo mismo que la comilla simple, entonces ya se puede inyectar sql en mi web!
También vi que se puede inyectar código poniendo una inyección sin comillas por ejemplo:
http://ejemplo.com/index.php?id=4 AND BENCHMARK(99999999,MD5(0x123123));
con "AND BENCHMARK(99999999,MD5(0x123123));" se genera un DoS en mi servidor, porque consume mucho procesador.
¿Existe una forma de que se limpien absolutamente todo tipo de inyección? Es decir, que no sea tan mala como mysql_real_escape_string que permite inyectar lo que mostré de ejemplo.
Muchas gracias de antemano :)


Título: re
Publicado por: WHK en 29 Agosto 2009, 19:37 pm
https://foro.elhacker.net/nivel_web/como_evitar_la_inyeccion_sql-t252384.0.html

Siempre siempre siempre que utilizes el envío de variables a una query mysql debes encerrarlos en comillas dobles, es tan simple como eso y si es una variable que unicamente procesa integers debes hacerlo con (int).