Foros del Web » Programando para Internet » PHP »

Duda evitar mysql injection

Estas en el tema de Duda evitar mysql injection en el foro de PHP en Foros del Web. Buenas! Estoy editando mi codigo para evitar inyecciones mysql con mysql_real_escape_string y sprintf, y los INSERT me han quedado así: Código PHP: $ingreso_cas = sprintf ...
  #1 (permalink)  
Antiguo 05/09/2012, 04:28
 
Fecha de Ingreso: agosto-2012
Mensajes: 12
Antigüedad: 12 años, 2 meses
Puntos: 0
Exclamación Duda evitar mysql injection

Buenas! Estoy editando mi codigo para evitar inyecciones mysql con mysql_real_escape_string y sprintf, y los INSERT me han quedado así:

Código PHP:
$ingreso_cas=sprintf

    
("INSERT INTO cas 
          (dni_passaport,cfgm_cursat,centre_cfgm,cfgs_interes) 
     VALUES 
      ('%s','%s','%s','%s') "
,
     
mysql_real_escape_string($dni), 
         
mysql_real_escape_string($cfgm_cursat),                      
         
mysql_real_escape_string($centre_cfgm_cursat),     
         
mysql_real_escape_string($cfgs_interes)); 
El problema es que tengo un INSERT más complejo funcionando con un "implode" y no sé como aplicarle el sprintf y mysql_real_escape_string como en el ejemplo anterior...
Es este:

Código PHP:
$ingreso_eso_necessitats
        
"INSERT INTO alumne_necessitats (".implode(','$camps_necess) . ") 
        VALUES ("
implode(','$Valors_necess).")"
Espero vuestra ayuda, gracias!
  #2 (permalink)  
Antiguo 05/09/2012, 05:44
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 6 meses
Puntos: 58
Respuesta: Duda evitar mysql injection

Puede que me equivoque pero yo creo que con hacerlo así basta (en ambos casos)

$consulta ="INSERT INTO alumne_necessitats (".implode(',', $camps_necess) . ")
VALUES (". implode(',', $Valors_necess).")";

$consulta = mysql_real_escape_string($consulta);

Sino que alguien me corrija.
  #3 (permalink)  
Antiguo 05/09/2012, 06:21
 
Fecha de Ingreso: agosto-2012
Mensajes: 12
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Duda evitar mysql injection

Así funciona?? Si funciona me facilitaría mucho el trabajo... Aunque de esa manera no se aplica el SPRINTF y entonces no se si seguirá siendo vulnerable...

De todas formas como puedo saber si así ya evita inyección mysql? No he descubierto ninguna forma de probarlo...

Gracias!!
  #4 (permalink)  
Antiguo 05/09/2012, 08:11
 
Fecha de Ingreso: agosto-2012
Mensajes: 12
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Duda evitar mysql injection

Estoy probando pero me hace algo muy extraño y no me ingresa nada a la DB... Gracias de todos modos.

Alguien podría hacerlo con el mismo método que he puesto en la pregunta?

Muchas gracias!
  #5 (permalink)  
Antiguo 05/09/2012, 08:45
Avatar de efenollal  
Fecha de Ingreso: abril-2012
Ubicación: Toa Baja
Mensajes: 63
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Duda evitar mysql injection

Buenas:
No necesitas utilizar sprintf como tal, solamente tienes que utilizar $Valors_necess como array() y dentro de ese array utilizas mysql_real_escape_string.
Ej.


Código PHP:
Ver original
  1. $Valors_necess = array(
  2.         mysql_real_escape_string("valor1"),
  3.         mysql_real_escape_string("valor2"),
  4.     );
Y luego puedes entonces hacer el INSERT a la base de datos con
implode(',', $Valors_necess).
Espero te ayude.
  #6 (permalink)  
Antiguo 05/09/2012, 14:50
Avatar de thetwister  
Fecha de Ingreso: agosto-2008
Mensajes: 30
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: Duda evitar mysql injection

que no se supone que si $Valors_necess es una variable array, con usar mysql_real_escape_string sobre el, lo haria para todos los valores que tiene dentro?

algo asi como

Código PHP:
Ver original
  1. .
  2. $Valors_necess = mysql_real_escape_string($Valors_necess);
  3. .

Porque si son varios valores te llevaria mas tiempo el ir usando el ..escape_string en todas, o al menos eso creo yo
  #7 (permalink)  
Antiguo 05/09/2012, 15:03
Avatar de efenollal  
Fecha de Ingreso: abril-2012
Ubicación: Toa Baja
Mensajes: 63
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Duda evitar mysql injection

Ok. mysql_real_escape_STRING te lo dice. No quieres convertir al array en string pq te va a traer un error. Lo que se quiere es tratar a los valores del array que se supone que sean string. Si quieres hacerlo mas dinamico podrias hacerlo con un foreach:

Código PHP:
Ver original
  1. foreach($Valors_necess as $k => $v){
  2.     $Valors_necess[$k] = mysql_real_escape_string($v);
  3. }

Etiquetas: injection, mysql
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 23:33.