mysql_real_escape_string no es suficiente

Iniciado por USUARIO_DE_SOFTWARE_LIBRE, 28 Agosto 2009, 01:50 AM

0 Miembros y 1 Visitante están viendo este tema.

USUARIO_DE_SOFTWARE_LIBRE

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 :)

WHK

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).