Foros del Web » Programando para Internet » PHP »

que posibilidades hay de evitar una injecion en una consulta mysql

Estas en el tema de que posibilidades hay de evitar una injecion en una consulta mysql en el foro de PHP en Foros del Web. Hola, que alternativas tengo para evitar ataques en mis consultas utilizando la base de datos mysql, si por ejemplo tengo una consulta algo como esto: ...
  #1 (permalink)  
Antiguo 17/12/2011, 17:34
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
que posibilidades hay de evitar una injecion en una consulta mysql

Hola, que alternativas tengo para evitar ataques en mis consultas utilizando la base de datos mysql, si por ejemplo tengo una consulta algo como esto:

Código PHP:
Ver original
  1. $nombre=$_POST['nombre']
  2. $sql="SELECT * FROM clientes WHERE nombre='".$nombre."'";

saludos.
  #2 (permalink)  
Antiguo 17/12/2011, 18:16
 
Fecha de Ingreso: diciembre-2011
Mensajes: 26
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Amigo esta funcion es del PHP y evita que exita SQL injection en tu sentencia:

http://www.php.net/manual/en/function.mysql-real-escape-string.php

Se usa:

Código PHP:
Ver original
  1. $nombre=mysql_real_escape_string($_POST['nombre']);
  2.  
  3.     $sql="SELECT * FROM clientes WHERE nombre='".$nombre."'";
  4.  
  5.     mysql_query($sql);
  #3 (permalink)  
Antiguo 17/12/2011, 18:43
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Hola JesusCova, en principio gracias por tu respuesta aunque esta funcion ya la conocia pero claro no garantiza evitar la injecion, eso es cierto?que puedo hacer para ser aun mas segura la consulta, un saludo.
  #4 (permalink)  
Antiguo 17/12/2011, 22:01
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 12 años, 7 meses
Puntos: 12
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

No puedes.... todo evoluciona tan rapido que no es posible pensar en todas las posibilidades, es una realidad que hay que aceptar y seguir adelante...

Pero por otro lado tampoco podemos ser tan tontos como para mandarlo todo por un tubo y no poner protecciones, en mi opinion lo mejor es tratar de lograr un "termino medio".... poner lo maximo de proteccion que este a nuestro alcance sin caer en la paranoia...

Me recuerda algunas anectodas que lei en bash.org... como esta :P

http://bash.org/?117002
  #5 (permalink)  
Antiguo 18/12/2011, 11:01
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

$sql=sprintf("SELECT * FROM clientes WHERE nombre='%s' " ,mysql_real_escape_string($_POST['nombre']) );

mysql_query($sql);

mejor seria asi

y chico3001 tiene razon no hay nada seguro en estos tiempos que corren.
  #6 (permalink)  
Antiguo 18/12/2011, 11:19
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

De acuerdo con las respuestas, pero hay una forma más segura

mysqli_stmt

Las consultas preparadas, permiten ejecutar una consulta incluyendo los parámetros por medio de bindings, y es compatible con mysqli_real_escape_string
  #7 (permalink)  
Antiguo 18/12/2011, 11:43
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Gracias por las respuestas, ElSiniestro me puedes poner un ejemplo de como implementar mysqli_stmt, saludos
  #8 (permalink)  
Antiguo 18/12/2011, 11:58
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Todo esto sería mas sencillo si utilizases PDO, una clase para abstraerte de la base de datos que maneja statements para poder preparar, bindear y ejecutar queries.

Saludos
  #9 (permalink)  
Antiguo 18/12/2011, 12:02
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Hola SetheR, sabes de algun tutorial donde te expliquen como funciona la clase PDO, para hacer seguras las consultas, gracias por la informacion saludos
  #10 (permalink)  
Antiguo 18/12/2011, 12:26
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Googleando un poco:

Aqui o aqui

Sobre lo de las consultas seguras, al utilizar statements preparados, PDO se encarga de limpiar las consultas.

Código PHP:
Ver original
  1. //$db es el objeto PDO
  2. $stmt = $db->prepare('SELECT * FROM items WHERE id = ?');
  3.  
  4. $stmt ->execute(array($miVariableID));
  #11 (permalink)  
Antiguo 18/12/2011, 18:30
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

La clase PDO parece que sea bastante segura trabajar con ella, pero como podria saber que funciona bien a injeciones, por ejemplo con la consulta que puse al principio del post, una consulta vulnerable a injecciones, de que manera me pueden atacar, si la consulta es esta:


Código PHP:
Ver original
  1. $sql="SELECT * FROM clientes WHERE nombre='".$_POST['nombre']."'";

Espero que los expertos me puedan contestar para poder probar si el resultado final de mis consultas son seguras o por lo menos no son vulnerable a injeciones, saludos.
  #12 (permalink)  
Antiguo 18/12/2011, 22:51
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Aquí está todo sobre mysqli_stmt (insisto porque es más rápida que PDO)

http://co.php.net/manual/es/class.mysqli-stmt.php

Básicamente consiste en preparar una consulta con espacios en blanco (representados por símbolos "?") que son rellenados por medio de mysqli_bind_param y estos a su ven poseen variables escapadas

Ahí mismo hay ejemplos

Espero puedas implementarlo
  #13 (permalink)  
Antiguo 19/12/2011, 05:03
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Hola ElSiniestro, gracias por tu aportacion, pero la verdad que ahora si que estoy echo un lio, no se que elejir si pdo o mysqli_stmt, alguna opinion mas sobre estas dos clases, yo voy a trabajar con mysql, saludos.
  #14 (permalink)  
Antiguo 19/12/2011, 05:04
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Cita:
Iniciado por pithon Ver Mensaje
La clase PDO parece que sea bastante segura trabajar con ella, pero como podria saber que funciona bien a injeciones, por ejemplo con la consulta que puse al principio del post, una consulta vulnerable a injecciones, de que manera me pueden atacar, si la consulta es esta:


Código PHP:
Ver original
  1. $sql="SELECT * FROM clientes WHERE nombre='".$_POST['nombre']."'";

Espero que los expertos me puedan contestar para poder probar si el resultado final de mis consultas son seguras o por lo menos no son vulnerable a injeciones, saludos.
Referente a este post, nadie me puedo decir como pueden poner la injecion con una sql asin, para comprobar que una vez cambiado mi codigo es mas seguro, saludos.
  #15 (permalink)  
Antiguo 19/12/2011, 11:53
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

no creo que nadie x aki te especifique eso , pero el ataque seria atraves del

nombre='".$_POST['nombre']."'";

en vez de postear un usuario su nombre en el form te ingresa codigo para ejecutar la consulta
  #16 (permalink)  
Antiguo 19/12/2011, 12:08
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

Cuando se inicia sesión, siempre se utilizan comparaciones lógicas para revisar la existencia del usuario. El riesgo de inyección es precisamente en esa comparación. Cuando alguien pasa una consulta al servidor con una comparación lógica que pone a "dudar" al servidor es cuando todo queda expuesto.

Aquí puedes ver las consultas preparadas en mysql_stmt y un ejemplo de inyección SQL:

http://www.jveweb.net/archivo/2011/07/sentencias-preparadas-de-mysql-en-php-ejemplos-estructurados.html

http://www.jveweb.net/archivo/2011/07/un-ataque-de-inyeccion-de-sql.html

Por eso para protegerse de inyección SQL, no sólo basta con proteger las consultas, sino accediendo por medio de un usuario creado en el servidor MySQL que tenga privilegios restringidos (o sea, diferente al root) y sin la opción grant; además se debe restringir el acceso exclusivamente a la base de datos que se necesita acceder, entre otras medidas de seguridad
  #17 (permalink)  
Antiguo 21/12/2011, 04:48
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: que posibilidades hay de evitar una injecion en una consulta mysql

webankenovi en principio gracias por tu respuesta, entiendo que se hace asin, ya vi la forma de evitarlo.

ElSiniestro muchas gracias por la informacion, saludos.

Etiquetas: mysql, posibilidades, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:17.