Estoy creando un script de carga de archivos y estoy buscando las mejores técnicas y prácticas para validar los archivos cargados.Validación de archivos de carga de PHP
extensiones permitidas son:
$allowed_extensions = array('gif','jpg','png','swf','doc','docx','pdf','zip','rar','rtf','psd');
Aquí está la lista de lo que estoy haciendo.
Comprobación de extensión de archivo
$path_info = pathinfo($filename); if(!in_array($path_info['extension'], $allowed_extensions)) { die('File #'.$i.': Incorrent file extension.'); }
archivo de comprobación de tipos MIME
$allowed_mimes = array('image/jpeg','image/png','image/gif','text/richtext','multipart/x-zip','application/x-shockwave-flash','application/msword','application/pdf','application/x-rar-compressed','image/vnd.adobe.photoshop'); if(!in_array(finfo_file($finfo, $file), $allowed_mimes)) { die('File #'.$i.': Incorrent mime type.'); }
Comprobación de tamaño del archivo.
¿Qué debo hacer para asegurarme de que los archivos cargados son válidos? Noté algo extraño. Cambié la extensión de archivo .jpg a .zip y ... se cargó. Pensé que tendría un tipo MIME incorrecto, pero después de eso me di cuenta de que no estoy buscando un tipo específico, pero si existe un tipo MIME específico en el conjunto. Lo arreglaré más tarde, eso no presenta ningún problema para mí (por supuesto, si tienes una buena solución/idea, no dudes en compartirla, por favor).
Sé qué hacer con las imágenes (intente redimensionar, rotar, recortar, etc.), pero no tengo idea de cómo validar otras extensiones.
Ahora es el momento de hacer mis preguntas.
- ¿Conoces buenas técnicas para validar dichos archivos? Tal vez debería descomprimir archivos para archivos .zip/.rar, pero ¿qué pasa con los documentos (doc, pdf)?
- ¿Va a rotar, cambiar el tamaño de trabajo para archivos .psd?
- Básicamente pensé que el archivo .psd tiene las siguientes MIME: application/octet-stream pero cuando
me trataron de subir .psd presentar Me mostró (imagen/vnd.adobe.photoshop). Estoy un poco confundido acerca de esto. ¿Los archivos siempre tienen el mismo tipo MIME?
Además, no puedo forzar el bloqueo de código para que funcione. ¿Alguien tiene una idea de por qué?
Entonces, corríjame si me equivoco, si los bytes de inicio de JPEG son diferentes de '0xFF, 0xD8;' significa que el archivo no es válido ¿no? ¿Hay alguna lista de "bytes iniciales" por ahí? O ... ¿cómo puedo crearlo? – Tom
Aquí hay una lista decente: http://www.mikekunz.com/image_file_header.html Falta un archivo PNG, pero su encabezado es bastante consistente por lo que he visto. –
@Collin Allen: ¡Muchas gracias! Ahora sé qué buscar. – Tom