Foros del Web » Programando para Internet » PHP »

como puedo hacer segura esta consulta a mi db

Estas en el tema de como puedo hacer segura esta consulta a mi db en el foro de PHP en Foros del Web. Hola, quedria saber como puedo hacer segura mi consulta sql, ya que los valores se los paso por url para hacerla dinamica, pero muy segura ...
  #1 (permalink)  
Antiguo 23/08/2011, 12:47
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
como puedo hacer segura esta consulta a mi db

Hola, quedria saber como puedo hacer segura mi consulta sql, ya que los valores se los paso por url para hacerla dinamica, pero muy segura no es y quisiera saber como evitar esto, mi consulta seria algo como:

Código PHP:
Ver original
  1. $sql="select * clientes where pais=".$_GET['pais']."";

los valores los tiene que sacar el usuario de una lista desplegable, segun elija una opcion o tra la consulta cambia, pero claro muy seguro no es, como puedo hacer segura esta consulta dinamica, o es mejor no hacerlo de esta forma.

Alguna opinion de los expertos en php?
  #2 (permalink)  
Antiguo 23/08/2011, 13:05
Avatar de gusma62  
Fecha de Ingreso: julio-2008
Ubicación: Tepatitlán, Jalisco, Mexico
Mensajes: 167
Antigüedad: 15 años, 9 meses
Puntos: 6
Respuesta: como puedo hacer segura esta consulta a mi db

si $_GET['pais'] se refiere al id (número) del país, puedes hacer lo siguiente:

Código PHP:
Ver original
  1. $pais = (int)$_GET['pais'];
  2. $sql="select * clientes where pais=".$pais."";

Esto solo funciona con este tipo de consultas numéricas
  #3 (permalink)  
Antiguo 23/08/2011, 13:23
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: como puedo hacer segura esta consulta a mi db

Siempre y cuando sea numerico, con pasarlo a entero bastara.
En cuanto a las cadenas, tendras que usar mysql_real_escape_string() (Si utilizas MySQL, sino, busca el equivalente para tu motor de BD)
  #4 (permalink)  
Antiguo 23/08/2011, 13:23
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: como puedo hacer segura esta consulta a mi db

busca sobre esto

is_int
is_numeric
__________________
aconcaguaestudio.com
  #5 (permalink)  
Antiguo 23/08/2011, 13:26
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: como puedo hacer segura esta consulta a mi db

Gracias a todos por vuestra colaboracion, realmente son datos numericos, osea que como dijo el experto gusma62 ya no es vulnerable a inyeccion mi consulta?

Saludos.
  #6 (permalink)  
Antiguo 23/08/2011, 13:38
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: como puedo hacer segura esta consulta a mi db

Ya no será vulnerable, pues (int) convierte la cadena a tipo integer, y en sólo integer no se puede inyectar. Intenta esto y verás el resultado:

Código PHP:
Ver original
  1. $var = 'holaejemplo1243432';
  2. echo (int)$var;
  3.  
  4. $varr = '23223';
  5. echo (int)$var;

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #7 (permalink)  
Antiguo 23/08/2011, 13:50
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: como puedo hacer segura esta consulta a mi db

También puedes usar la función sprinf

Código PHP:
Ver original
  1. $sql = sprintf("select * clientes where pais=%d", $num);
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 23/08/2011, 13:56
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: como puedo hacer segura esta consulta a mi db

Sourcegeek gracias por tu aclaracion, andresdzphp lo tendre en cuenta, bueno me quedo claro cuando los valores son enteros pero si el valor que se pasa es una cadena de alpha numerica? que me aconsejais?
  #9 (permalink)  
Antiguo 23/08/2011, 13:58
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: como puedo hacer segura esta consulta a mi db

En ese caso puedes hacer algo así:

Código PHP:
Ver original
  1. $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
  2.             mysql_real_escape_string($user),
  3.             mysql_real_escape_string($password));

Lee sobre la función mysql_real_escape_string, ayuda bastante en casos de inyección
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #10 (permalink)  
Antiguo 23/08/2011, 13:59
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como puedo hacer segura esta consulta a mi db

Que tal primary,

Primero bienvenido al foro y segundo te sugiero que utilices PDO y Prepared Statements.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 23/08/2011, 14:18
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: como puedo hacer segura esta consulta a mi db

Gracias de nuevo andresdzphp por tu ayuda y masterpuppet gracias por la informacion eso es lo que queria.

Saludos.

Etiquetas: segura, 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 17:10.