Libmagic / file .docx dosyalarını algılamak


17

Başka yerlerde görüldüğü gibi , docx, xlsx ve pttx ZIP'lerdir. Bunları web uygulamama yüklerken, file( libmagicve aracılığıyla python-magic) ZIP olarak algılar.

Dosyanın içeriğini veritabanında bir blob olarak saklıyorum, ancak doğal olarak bu tür bir dosya türü ile kullanıcıya güvenmek istemiyorum. Bu yüzden fileindirme sırasında güvenmek ve otomatik olarak bir dosya adı oluşturmak istiyorum .

Biri değiştirebilir biliyorum /etc/magicama format ( magic(5)) benim için çok karmaşık. Debian hatalarında bir hata raporu buldum ama 2008'den beri yakında herhangi bir zamanda düzeltilmiş görünmüyor.

Sanırım diğer tek alternatifim gerçekten kullanıcıya güvenmek (ama yine de içeriği bir damla olarak saklamak) ve sadece dosya uzantısına göre dosya uzantısını kontrol etmektir. Bu şekilde bazı uzantılara izin vermeyebilir ve diğerlerine izin verebilirim. Ve kullanıcı dosyasını yeniden indirdiğinde, dosyayı her şekilde yükleyebilir. Ancak dosya başkalarıyla paylaşılırsa bu çözüm güvenli değildir, çünkü dosyayı yüklemeye izin vermek için yeniden adlandırabilirsiniz.

Herhangi bir fikir?

Son olarak, docx vs için sihirli numaraların bir listesini buldum , ancak bunları magic(5)formata dönüştüremiyorum.

Yanıtlar:


17

Kullanabilirsiniz

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

/ etc / magic içindeki genel dosya türünü belirttiğiniz bilgilere göre belirleyin.

(Ancak bu evrensel olmayabilir: PK\x03\x04\x00\x14\x08\x08LibreOffice tarafından oluşturulan XLSX dosyalarının başında gözlenmiştir.)

Ubuntu'nun sonraki sürümlerinde .docx, .pptx ve .xlsx dosyalarını doğru bir şekilde tanımlama hakkı vardır. Dosya yardımcı programı için sorce kodunu dolaşırken kimliğini yapan dosyayı buldum ~/file-5.09/magic/Magdir/msooxml. Şunları yapabilirsiniz dosyanın bir kopyasını almak ve sizin eklemek /etc/magicdosyanın.


V 1.5 sürümüne güncellenmiş dosyanın kopyası dahil


# $File: msooxml,v 1.5 2014/08/05 07:38:45 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".
#   but some libreoffice generated files put this later. Perhaps skip
#   the "[Content_Types].xml" test?
# 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
!:strength +10
# make sure the first file is correct
>0x1E       regex       \\[Content_Types\\]\\.xml|_rels/\\.rels
# 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
---

Fakat V1.2'yi gelecek nesiller için burada bırakmak.

Buraya yukarıdaki bağlantı olarak bir kopya eklemek, dosya paketi güncellendiğinde güncelliğini yitirebilir.

#------------------------------------------------------------------------------
# $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

1
Bu dosyanın (msooxml) içeriğini / etc / magic'e (debian) ekledim ve çalıştı.
Jay K

~/file-5.11/magic/Magdir/msooxmlKullandığım bazı powerpoint örnek dosyaları için çalışmayan kaynağı kullanma hatasına düşmüş olmama rağmen bu benim için de işe yaradı . Sürüm file-5.17olsa harika çalışıyor (belki bir şey sekmeler veya ... dunno ile ilgili).
dsummersl

FWIW, bunu Scientific Linux 6'da denedim, ancak görünüşe göre hala file5.04'te, MIME türü etiketini 64 karakterde kesiyor (ancak sizi uyarıyor) @ stanley-c'de belirtildiği gibi. Ayrıca Mac OS X Mavericks'i de denedim, ancak kuralları uygulamak için alamadım (her ne kadar [ve ikinci kuralda kaçmak gerekmediği konusunda beni uyardı).
jwadsack

"Microsoft OOXML" de sadece "Microsoft Word 2007+" değil, .docx dosyaları olabilir
golimar

4

5.13'ten önceki sürüm olan dosya, MIME türünü 64 karaktere indirir. Yani msooxml içeriğini kullanarak, dosya -bi komutundan MIME türü "mime application / vnd.openxmlformats-officedocument.wordprocessingml.d; charset = binary" olur


0

libreoffice'in docx'ini kullanıyorsanız, / etc / magic klasörüne içerik (aşağıda) ekleyebilirsiniz:

# start by checking for ZIP local file header signature
0               string          PK\003\004
!:strength +10
>1104           search/300      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

Bunu denedim, ancak daha önce yanlış algılanan bazı xlsx dosyalarının düzgün bir şekilde algılanmasına neden oldu, ancak daha önce doğru şekilde algılanan bazı xlsx dosyalarının artık algılanmamasına neden oldu
Motin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.