Foros del Web » Programando para Internet » PHP »

Problema con type, matriz $_FILES

Estas en el tema de Problema con type, matriz $_FILES en el foro de PHP en Foros del Web. Acudo a los expertos ! Me encuentro con una situación que desconozco si tiene solución: Yo verifico el tipo de archivo subido al servidor mediante ...
  #1 (permalink)  
Antiguo 08/12/2016, 15:12
 
Fecha de Ingreso: septiembre-2010
Mensajes: 42
Antigüedad: 13 años, 7 meses
Puntos: 0
Exclamación Problema con type, matriz $_FILES

Acudo a los expertos !
Me encuentro con una situación que desconozco si tiene solución:

Yo verifico el tipo de archivo subido al servidor mediante el "type" de $_FILES, lo cual me devuelve por supuesto el mime-type..

Mi duda está cuando el usuario pudiera renombrar su archivo local, cambiándole manualmente la extensión para pasarlo por bueno: Efectivamente el type obtenido sería el deseado :(

Existe alguna forma de detectar esta "jugada" del usuario y validar el archivo como formato erróneo ?

Muchas graciassss.
  #2 (permalink)  
Antiguo 08/12/2016, 17:26
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con type, matriz $_FILES

No entiendo bien. Hablas de subir un archivo a un servidor y que el usuario cambie el nombre del archivo localmente... tienes el sistema en forma local?

Si es así no tienes solución.

Si no es así una vez que subes el archivo el usuario no tiene acceso a el no importa si el luego le cambia el nombre al archivo localmente. La única forma de tener acceso es por algún sistema tipo cpanel o por protocolo ftp

  #3 (permalink)  
Antiguo 08/12/2016, 17:58
 
Fecha de Ingreso: septiembre-2010
Mensajes: 42
Antigüedad: 13 años, 7 meses
Puntos: 0
Exclamación Respuesta: Problema con type, matriz $_FILES

Con el archivo local me referia al archivo que sube al server, desde su PC.
Si le pido que suba una foto, y tiene un archivo virus.exe y lo renombra a virus.jpg,
el type del archivo me da "image/jpeg", por lo cual pasa por bueno.

Esa es mi duda.. como detectar el cambio de extensión que puede hacer el usuario y detectarlo en la validación previo al upload definitivo al server, para evitar la subida de ese "virus" con extensión cambiada.
  #4 (permalink)  
Antiguo 08/12/2016, 20:13
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con type, matriz $_FILES

Como en todo computador mientas no ejecutes el programa el virus no se planta.

No sucede absolutamente nada, uno cuando "abre" un archivo (no confundir con programa) no lo "ejecuta", sino que se "lee" con un programa determinado. Por ejemplo:

Archivos de texto con notepad
Archivos de imagen con paint
Archivos de audio con reproductor de media

O en su defecto te pedirá un programa para abrirlo (leerlo).

Estos son ejemplos de microsoft, pero pasa lo mismo con todos los OS.

No así con programas (ejecutables) en ese caso si lo abres (ejecutas) el virus se planta...

De hecho puedes hacer un ejercicio práctico en tu PC: Cambiale el nombre a un programa ejecutable por el de un archivo con extension ya sea txt,jpg,mp3 y lo abres, te darás cuenta de que el programa no se EJECUTA como tal, sino que programa por defecto lo leerá y lo imprimira (texto, imagen, audio). ahora si lo ejecutas desde consola si se abrirá el programa como es...

A lo que voy, si EJECUTAS el archivo ya sea con exec() o shell_exec() o consola ahí sí estás frito...

Mas aún algo muy cotidianto: todas las imágenes, videos que ves con tu explorador en todo momento se guardan en tu PC ya sea momentánea o permanentemente y todos pasan por este paradigma y nada sucede.

Otro ejemplo es RAR o ZIP, tu descomprimes el archivo y se guarda en el PC, mientras no ejecutes los ejecutables que descomprimes nada pasará.

Bueno alargue demasiado todo, espero te sirva la teoría.
  #5 (permalink)  
Antiguo 08/12/2016, 20:36
 
Fecha de Ingreso: septiembre-2010
Mensajes: 42
Antigüedad: 13 años, 7 meses
Puntos: 0
Exclamación Respuesta: Problema con type, matriz $_FILES

Entonces en definitiva lo que me decís es que el archivo, dado un cambio de extensión por parte del usuario, seria APROBADO en el proceso de validación (INEVITABLEMENTE), se sube el archivo al server, pero.. como no se ejecuta, sino que simplemente se lee, NO genera ningún daño.

Estoy en lo correcto ?
Muchas gracias por tu ayuda !
  #6 (permalink)  
Antiguo 08/12/2016, 20:41
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con type, matriz $_FILES

Estaba leyendo un poco y php arregla esto, porque no me gusto el enfoque, usa esto:

Código PHP:
Ver original
  1. function getExt($file){
  2. $f = finfo_open(FILEINFO_MIME_TYPE);
  3. $r = finfo_file($f, $file);
  4. return $r;
  5. }

Denuevo disculpa!!!

De todos modos no tengo idea si este método es vulnerable

Última edición por alvaro_trewhela; 08/12/2016 a las 22:10
  #7 (permalink)  
Antiguo 08/12/2016, 23:16
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema con type, matriz $_FILES

A lo que te refieres algunos le llaman "enmascarar al archivo", pudiendo así camuflar archivos potencialmente peligrosos. Para esto, actualmente se utiliza el módulo Fileinfo (es posible que, en versiones antiguas de PHP, sea necesario activar la librería php_fileinfo.dll en el archivo php.ini), siendo la forma más efectiva para detectar casos así. Un ejemplo de su uso:
Código PHP:
Ver original
  1. $finfo = new finfo(FILEINFO_MIME_TYPE);
  2. $mime = $finfo->file($_FILES['ejemplo']['tmp_name']);
  3. $mimes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp'];
  4. echo in_array($mime, $mimes) ? 'Es un archivo de imagen' : 'No es un archivo de imagen';

En el ejemplo, se crea un nuevo recurso fileinfo, pasándole como argumento la constante FILEINFO_MIME_TYPE para así obtener el MIME del archivo; luego, obtenemos dicha información del archivo en cuestión; establecemos los MIME aceptados (en este caso, de archivos de imagen) en un arreglo y, finalmente, verificamos si el MIME del archivo coincide con uno de ellos, imprimiéndose una respuesta según sea el caso.

Y, en el caso de que la versión de PHP que usas no tenga implementado dicho módulo, puedes usar la función getimagesize(), con la diferencia de que solo podrás usarla con archivos de imagen.



P. D.: Creo que ya te respondieron esto. No había visto las respuestas.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 08/12/2016 a las 23:28 Razón: Posdata
  #8 (permalink)  
Antiguo 09/12/2016, 06:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 42
Antigüedad: 13 años, 7 meses
Puntos: 0
Exclamación Respuesta: Problema con type, matriz $_FILES

Esto de finfo está mucho mejor que el type de $_FILES !!

Por otra parte descubri, respecto a getimagesize(), que si renombro el archivo cambiándole la extensión, la función devuelve false, en lugar de un arreglo, lo cual no aprobaría la validación (se detecta la acción maliciosa).

gracias por la data !!

Etiquetas: files, matriz, type, usuario
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 15:40.