Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/08/2006, 18:47
califa010
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Cita:
Hice unas pruebas en mis sistemas .. subí un .exe como tal y el mismo renombrado a .txt. Los subí desde una máquina Windows XP (con IE 6 de navegador) a mi servidor PHP 5 bajo Linux (Fedora 5), en ambos casos obtube en "type" como formato MIME del archivo:

application/octet-stream
Es extraño, entonces. Y tal vez me apresuré a sacar una conclusión sobre esto teniendo en cuenta lo que contás. Yo hice 3 pruebas, en mi máquina (XP-Apache 1.3-PHP 5) y en dos servidores Linux (RedHat uno, Fedora el otro si no me equivoco, ambos corren PHP 4). Los archivos los subí desde mi máquina con IE y FF y como conté, obtuve text/plain leyendo el array $_FILES.

En cuanto a que el mime es un dato que aporta el cliente y como tal debe ser tomado con precaución, estamos de acuerdo. Justamente, a eso apuntaba mi comentario.

De todos modos, más allá de la extensión, por las pruebas que hice (que están lejos de ser exhaustivas) el servidor no se "confunde" tan fácilmente los tipos de archivos; quiero decir, en mis tests, no basta con nombrar a un archivo como .txt, para que haga lo que hace normalmente con cualquier .txt (en todas las configuraciones que tengo, mostrarlo por pantalla). Si el archivo original era un .exe, fuerza una descarga (lo mismo si el archivo era un .swf, que normalmente se ejecutaría).

No sé la verdad cuán factible será lograr que el servidor acepte un archivo .php en caso de que valides por mime-type que este tipo de archivos no puedan subirse. Pero si pudiera lograrse, creo que ahí sí habría un problema. Porque después de subir el archivo, para que haga algo debería ejecutarse; y si fuera un php, se ejecutaría sin mayores inconvenientes.

Ese es uno de los dos problemas potenciales más graves que le veo a todo "upload". El otro está asociado y tiene que ver con los include/require dinámicos. No es lo más común pero vi algunos sitios "modulares" que hacen cosas como "script.php?modulo=abmtal.php" (donde el parámetro indica el archivo a incluir). Es un caso más bien burdo, pero los hay. En un caso así, combinado con un upload de un inocente "jpg" (que en realidad tiene código php y en mis pruebas pasó como mime-type image/jpeg), podría haber un hueco importante en la seguridad. E imagino que otros casos no tan groseros también pueden tener vulnerabilidades del estilo (aunque es cierto que requeriría de más tiempo, ingenio y "talento" descubrirlas).

Tampoco soy un experto en el tema, pero me parece que usar los métodos de validación como sugerís no estaría mal para agregar un poco más seguridad; y por otra parte no cuesta demasiado hacerlo, ambas validaciones son bastante sencillas, así que creo que es una buena idea.

Suerte
Califa