17 votos

Hacer libmagic/archivo de detectar .los archivos docx

Como se ha visto en otros lugares, docx, xlsx y pttx son Cremalleras. Al subir a mi aplicación web, file (via libmagic ypython-magic) detecta como ZIP.

Yo almacenar el contenido del archivo como un blob en la base de datos, pero, naturalmente, yo no quiero confiar en el usuario con qué tipo de tipo de archivo es. Así que me gustaría confiar file y generar automáticamente un nombre de archivo durante la descarga.

Sé que uno puede modificar /etc/magic , pero el formato (magic(5)) es demasiado complicado para mí. He encontrado un informe de fallo en el problema en Debian bugs pero ya que es a partir de 2008 no parece ser fijado en cualquier momento pronto.

Supongo que mi única alternativa es, de hecho, la confianza que el usuario (pero aún almacenar el contenido de un objeto blob) y sólo comprobar la extensión de archivo basado en el nombre de archivo. De esta forma, se puede desactivar algunas extensiones y permitir a los demás. Y cuando el usuario re-descargas de su archivo, lo puede tener en cualquier forma que él lo ha subido. Pero esta solución es inseguro si el archivo es compartido con otros, ya que usted puede simplemente cambiar el nombre del archivo para permitir la carga.

Alguna idea?

Por último, he encontrado una lista de los números de magia para docx, etc, pero soy incapaz de convertir estos en la magic(5) formato.

17voto

katit Puntos 130

Puede utilizar

0       string  PK\x03\x04\x14\x00\x06\x00      Microsoft Office Open XML Format

en /etc/magia para identificar el general tipo de archivo basado en la información suministrada.

(Sin embargo, esto podría no ser universal: PK\x03\x04\x00\x14\x08\x08 ha sido observado en el inicio de LibreOffice-genera archivos XLSX.)

Las versiones posteriores de Ubuntu tener un ir en la correcta identificación de las .docx, .pptx y .archivos xlsx. Cavar alrededor de la fuente de código para el archivo de la utilidad que he encontrado el ~/file-5.09/magic/Magdir/msooxml archivo que hace a la identificación. Usted puede obtener una copia del archivo y agregarlo a su /etc/magic archivo.


Incluyendo una copia aquí el enlace de arriba se puede ir fuera de la fecha del archivo de paquete se actualiza.

#------------------------------------------------------------------------------
# $File: msooxml,v 1.2 2013/01/25 23:04:37 christos Exp $
# msooxml:  file(1) magic for Microsoft Office XML
# From: Ralf Brown <ralf.brown@gmail.com>

# .docx, .pptx, and .xlsx are XML plus other files inside a ZIP
#   archive.  The first member file is normally "[Content_Types].xml".
# Since MSOOXML doesn't have anything like the uncompressed "mimetype"
#   file of ePub or OpenDocument, we'll have to scan for a filename
#   which can distinguish between the three types

# start by checking for ZIP local file header signature
0               string          PK\003\004
# make sure the first file is correct
>0x1E           string          [Content_Types].xml
# skip to the second local file header
#   since some documents include a 520-byte extra field following the file
#   header,  we need to scan for the next header
>>(18.l+49)     search/2000     PK\003\004
# now skip to the *third* local file header; again, we need to scan due to a
#   520-byte extra field following the file header
>>>&26          search/1000     PK\003\004
# and check the subdirectory name to determine which type of OOXML
#   file we have
#   Correct the mimetype with the registered ones:
#     http://technet.microsoft.com/en-us/library/cc179224.aspx
>>>>&26         string          word/           Microsoft Word 2007+
!:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document
>>>>&26         string          ppt/            Microsoft PowerPoint 2007+
!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
>>>>&26         string          xl/             Microsoft Excel 2007+
!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
>>>>&26         default         x               Microsoft OOXML
!:strength +10

-3voto

Stanley C. Puntos 41

archivo de la versión anterior a 5.13, se truncará tipo MIME 64 caracteres. Así que, usando el contenido de msooxml, el tipo MIME del archivo-bi comando se convierte en "mime application/vnd.openxmlformats-officedocument.wordprocessingml.d; charset=binario"

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: