lunes, 22 de octubre de 2007

Como Proteger tus consultas PHP-MySQL del Sql Injection








El Sql-Injection es una gran preocupación a la hora de crear sitios o sistemas web para los desarrolladores, es una tecnica de hacking en donde el atacante puede obtener informacion importante y llegar a corromper o destruir tu base de datos.

Una practica simple puede ayudarte a proteger tu aplicación y por que no decir hasta tu "negocio" de intrusos que no deseas. En PHP es la manera más fácil de transmitir sus datos a través de la función mysql_real_escape_string. Al escapar los caracteres especiales en los campos donde el usuario puede manipular la base de datos, usted evitar ser vulnerables.

Ejemplo :

// This is a vulnerable query.
$query = "SELECT * FROM products WHERE name='$productname'";
mysql_query($query);

// This query is more secure
$query = sprintf("SELECT * FROM products WHERE name='%s'",
mysql_real_escape_string($productname));
mysql_query($query);

La parte más importante de ti mismo es poner fin a la protección de los usuarios de ser capaces de pasar sin alterar la base de datos de manipulación de los caracteres especiales, como comillas simples.

4 comentarios:

Anónimo dijo...

ola, me lo podrias explicar.

y una duda que tengo, para conectarse a la base de datos hay que poner la contraseña y un nombre de usuario, eso no es visible para los usuarios?

harry dijo...

no es bunlerable por que el codigo php se interpreta del lado del servidor, no se muestra al usuario final

Felipe dijo...

exacto, como dice harry, php es ejecutado en el lado del servidor, por lo que el código fuente de las conexiones a base de datos, consultas, manipulacion de información php no se mostrarán al ver el codigo fuente desde el navegador web.

Tutor Dk dijo...

Harry y Felipe, siento deciros que estais equivocados...

Imaginad por un momento, en la consulta que pone el $productname viene por un $_get o un $_post por la url, por que han sido seleccionados al hacer click sobre el producto... hasta ahí bien, el valor que pasa por la url es por ejemplo "1", hasta ahí, bien, pero que ocurre si se pone directamente en la url una ' ?
es decir la consulta$query = "SELECT * FROM products WHERE name='1'"; < ese es el valor pasado normalmente
$query = "SELECT * FROM products WHERE name='''"; <- eso si se cambia en la url el 1 por una ', ya te daría un error el servicio, y mostraría donde y en que linea (a no ser que tengais deshabilitados los mensajes de error...)

Os aconsejo que busqueis más información sobre estos tipos de ataque o si seguís sin creerselo... postead un enlace con la aplicación web que tengais en producción y probamos a ver que tal :)

Un saludo!

http://www.vertutoriales.com