Foros del Web » Programando para Internet » PHP »

Extension real de un archivo.

Estas en el tema de Extension real de un archivo. en el foro de PHP en Foros del Web. Trabajando en la web que estoy haciendo me ha surgido esta duda... Si el usuario puede subir archivos a la web, ¿hasta que punto nos ...
  #1 (permalink)  
Antiguo 21/11/2007, 12:14
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Extension real de un archivo.

Trabajando en la web que estoy haciendo me ha surgido esta duda...

Si el usuario puede subir archivos a la web, ¿hasta que punto nos puede colar archivos maliciosos?

Yo solo quiero dejar subir archivos con extension ".p3t" a mi servidor. Si compruebo la extension del fichero asi:

Código PHP:
$_FILES['tu_archivo']['type']; 
¿Seria correcto? ¿o eso solo te devuelve la extensión separando el "." ?

¿Si un archivo se renombra con otra extensión se puede colar?


Habria que hacer una comprobación más completa con tal de comprobar que realmente se está subiendo ese tipo de archivo o esa funcion ya evita fakes?

Bueno eso es, gracias.
  #2 (permalink)  
Antiguo 21/11/2007, 19:14
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Extension real de un archivo.

Nadie una ayudita? :p
  #3 (permalink)  
Antiguo 21/11/2007, 19:31
 
Fecha de Ingreso: octubre-2003
Mensajes: 55
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Extension real de un archivo.

Creo que es mejor que manipules el nombre del archivo como una cadena, y extraigas los 3 últimos caracteres para comprobar que archivos intentan lanzarte a tu web.

Saludos
  #4 (permalink)  
Antiguo 21/11/2007, 19:46
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Extension real de un archivo.

Pero eso no comprobaria la extension real, sinó como acaba el nombe del fichero no? no serviria para archivos renombrados :/
  #5 (permalink)  
Antiguo 21/11/2007, 20:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 55
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Extension real de un archivo.

Veo que quieres una especie de aplicación que analize la porción binaria de la cabecera del archivo para saber de que tipo es realmente.

Pues eso no creo que sea sencillo, pues tienes que tener los datos precisos de cada formato de archivo que exista, y te puedo decir que pueden ser miles.

Salu2!
  #6 (permalink)  
Antiguo 22/11/2007, 04:14
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 12 años, 8 meses
Puntos: 292
Re: Extension real de un archivo.

Yo me fijaria que: no comience con "MZ" (tipico de los .EXE)

Si empieza con MZ no significa que sea un binario de Windows pero SI que puede serlo!
__________________
Salu2!
  #7 (permalink)  
Antiguo 22/11/2007, 04:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 15 años, 1 mes
Puntos: 48
Re: Extension real de un archivo.

Del manual:
Cita:
$_FILES['userfile']['type']

The mime type of the file, if the browser provided this information. An example would be "image/gif". This mime type is however not checked on the PHP side and therefore don't take its value for granted.
Parece ser que es un valor que envia el navegador, con lo cual no es dificil de engañar.
  #8 (permalink)  
Antiguo 22/11/2007, 05:14
(Desactivado)
 
Fecha de Ingreso: noviembre-2007
Mensajes: 495
Antigüedad: 12 años
Puntos: 7
Re: Extension real de un archivo.

Revisa filetext.com pruebas con buscar una extensión y mostrará como empieza en hex dicho formato de archivo.
  #9 (permalink)  
Antiguo 22/11/2007, 06:29
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Extension real de un archivo.

Cita:
Iniciado por bootexe Ver Mensaje
Revisa filetext.com pruebas con buscar una extensión y mostrará como empieza en hex dicho formato de archivo.
Mi tipo de archivo seran ".p3t" que son themes para la PS3, en esa web no aparece el formato :(


Os lanzo esta pregunta... podria montar este servidor de ficheros haciendo uso solo de la funcion dicha antes? yo no es que quiera comprobar el valor hex. o el binario y todo eso, lo unico que quiero es que no me puedan subir virus y cosas raras >_<
  #10 (permalink)  
Antiguo 22/11/2007, 10:03
 
Fecha de Ingreso: noviembre-2007
Ubicación: Córdoba
Mensajes: 70
Antigüedad: 12 años
Puntos: 1
Re: Extension real de un archivo.

Hola.

Esto que quieres creo que es de difícil solución (a no ser que leas las cabeceras binarias del archivo como ya te han dicho). La extensión de un archivo no es fiable, ya que cualquiera puede modificarla (o ni tan siquiera ponerla, recordemos que en linux no es necesario hacerlo), aunque puedes exigir que quién suba tus archivos, siempre ponga la extensión ".p3t". En cuanto a las cabeceras mime que envía el navegador (algo opcional, pues también se puede trucar) tampoco son fiables, ya que las envía si mal no recuerdo, en base a la extensión del archivo (¿alguien sabe exactamente como lo hacen?) o el tipo asociado en linux. Si yo a un archivo exe lo renombro y le pongo mi archivo.gif, seguramente el navegador envía las cabeceras para una imagen gif (a ver si alguien tiene tiempo y lo comprueba).

Por tanto, no tendrás mas remedio que realizar una comprobación de la extensión obligatoria que exiges, y.. o revisar archivo por archivo, o pasarle un antivirus desde el servidor, o... esperar a que los usuarios te reporten que su antivirus les avisa de que se están descargando un virus cuando intentan descargar el archivo.

Saludos.
  #11 (permalink)  
Antiguo 22/11/2007, 19:00
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Extension real de un archivo.

Pues vaya, por lo visto parece que si que es complicado.

Los servidores como megaupload, mediafire y todos estos, que sistema usan, se sabe? o se pueden subir archivos maliciosos?
  #12 (permalink)  
Antiguo 22/11/2007, 19:43
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 12 años, 8 meses
Puntos: 292
Re: Extension real de un archivo.

Por que la complican tanto ???? si no empieza con MZ.... listo!
__________________
Salu2!
  #13 (permalink)  
Antiguo 22/11/2007, 19:54
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Extension real de un archivo.

Como hago esa comprobacion italico?
  #14 (permalink)  
Antiguo 22/11/2007, 20:11
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 14 años, 8 meses
Puntos: 17
Re: Extension real de un archivo.

Independientemente, no es seguro confiar en los valores de $_FILES para el tipo, porque lo manda el explorador, así que un usuario malicioso podría simplemente pasar un archivo de otra extensión como si fuese .p3t

Mi recomendación es que chequees la extensión del archivo que sube, simple

Código PHP:
if (pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION) == 'p3t')
{
 
// ok!
} else {
//todo mal

  #15 (permalink)  
Antiguo 22/11/2007, 20:33
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Extension real de un archivo.

Hola Seppo, gracias por la respuesta,

¿esa instrucción no dejaria pasar archivos renombrados? es decir ¿controlaria casos fake?

He mirado por ahí y he visto que la instrucción te devuelve el tipo de archivo... pero no he conseguido encontrar las diferencias entre esta y la de [type].
  #16 (permalink)  
Antiguo 22/11/2007, 20:54
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 14 años, 8 meses
Puntos: 17
Re: Extension real de un archivo.

Deja pasar archivos que se le renombró la extensión, pero utilizar type también lo hace... El type te determina el MIME que le asigna el explorador a la extensión... las únicas formas que encontré de ver el mime type real es mediante las funciones mime_content_type y finfo_file, pero por lo general no están instalados, así que la única alternativa que queda es ver la extensión
  #17 (permalink)  
Antiguo 22/11/2007, 21:18
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 13 años, 8 meses
Puntos: 33
Re: Extension real de un archivo.

AbdelioR:
Considerando que una vez que tu usuario hace click en la pagina que toma el archivo, la subida no se puede detener.
Una salida es que deposites el archivo en un directorio temporal y con
$tipo = stristr($archivo,'.'); revisas el tipo:
if($tipo != ".p3t") { unlink el archivo y un mensaje a tu
usuario que ha subido un archivo no permitido y exit();.
Si cumple el requisito de ser del tipo .p3t,
entonces procedes a depositarlo en el directorio o direccion definitiva.
Saludos
Y espero ayude
Franco
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:07.