我有一个用例,我需要知道要识别的文件的文件类型,并将可执行文件(exe,安装程序等),存档文件(zip,rar等)列入黑名单。因此,依赖于扩展名对我来说是不够的,因为可以更改文件的扩展名但文件属性将保持不变。我尝试使用linux命令:
file --b filename
上述解决方案与除.xlsx和.docx文件之外的所有文件类型完美配合,因为该命令为.xlsx和.docx提供以下内容
Zip档案数据,至少提取v2.0
因此我最终将.xlsx和.docx文件列入黑名单。
任何人都可以建议我一种获取文件类型的方法,而不使用适用于xlsx和docx的扩展名。
答案 0 :(得分:1)
您必须更新file
命令(或其 magic 文件)。
最近版本确实识别MSOOXML个文件:
$ file -b test.docx
Microsoft Word 2007+
$ file --version
file-5.32
答案 1 :(得分:0)
我使用了Mimemagic Gem并添加了自定义魔法(由Gem调用)来识别xlsx,docx和pptx文件格式。这也不依赖于文件扩展名。
以下是我添加的魔法列表:
[['application/vnd.openxmlformats-officedocument.wordprocessingml.document.custom', [[0, "PK\x03\x04", [[30, '_rels/.rels', [[0..5000, 'word/']]]]]]],
['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.custom', [[0, "PK\003\004", [[30, '_rels/.rels', [[0..5000, 'xl/']]]]]]],
['application/vnd.openxmlformats-officedocument.presentationml.presentation.custom', [[0, "PK\003\004", [[30, '_rels/.rels', [[0..5000, 'ppt/']]]]]]],['application/vnd.openxmlformats-officedocument.wordprocessingml.document.custom', [[0, "PK\x03\x04", [[30, 'word/']]]]],
['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.custom', [[0, "PK\003\004", [[30, 'xl/']]]]],
['application/vnd.openxmlformats-officedocument.presentationml.presentation.custom', [[0, "PK\003\004", [[30, 'ppt/']]]]]].each do |magic|
MimeMagic.add(magic[0], magic: magic[1])
end