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.
Respuestas
¿Demasiados anuncios?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