He tenido esta pregunta por un tiempo: ¿cómo exactamente se determina el tipo de mimo de un archivo? Creo que esto se hace comprobando si los bytes específicos del archivo contienen alguno de los conocidos magic numbers/file signatures, ¿verdad?Fiabilidad de Mimetypes en Cargas (PHP)
Si es así, esto plantea otra pregunta, digamos que subo un script bash con una firma falsa de archivo GIF a un sitio web que solo permite subir imágenes, ¿qué va a pasar? O bien:
- la rutina de detección tipo MIME es lo suficientemente inteligente como para detectar las firmas falsas, o
image/gif
se devuelve erróneamente como el tipo MIME y se deja que la carga de continuar
no tengo una El editor HEX instaló ATM, y no me gusta formar conclusiones relacionadas con la seguridad de las pruebas ya que podría omitir (o malinterpretar) algo, por lo que mi pregunta es: ¿cuál de las opciones anteriores es la correcta?
Además, ¿hay alguna otra práctica recomendada (además de verificar el tipo MIME) para asegurarse de que un archivo dado es en realidad lo que parece/necesita (o está permitido)? Gracias por adelantado.
PS: Para que quede claro, no estoy preguntando por el índice type
en el $_FILES
superglobal.
El índice 'type' en' $ _FILES' proviene del navegador/usuario, no se puede confiar en absoluto.Estoy usando Fileinfo (o similares), pero la pregunta aún se aplica: si el mimo es falso, ¿Fileinfo es lo suficientemente inteligente como para detectarlo? –
Por lo que entiendo de la documentación, Fileinfo mira el encabezado más algunas heurísticas para detectar el tipo de archivo y no requiere (ni depende de) la información enviada por el navegador. –
La página en fileinfo en el manual de PHP dice que la detección de archivos no es 100% confiable. Asumiría que puedes crear un archivo que pueda engañarlo. – GordonM