我正在编写一些代码,我依靠文件实用程序来确定任意文件的文件类型,通常是音频文件。在大多数情况下,它工作得很好,例如ogg文件可能会提供以下输出:
Ogg数据,Vorbis音频,单声道,44100 Hz,~80000 bps,创建者:Xiph.Org libVorbis I(1.0.1)
一个简单的正则表达式可以将其归类为ogg vorbis。 但是对于其他一些文件类型,文件试图变得聪明,例如nsf(NES声音格式)文件可以产生这个输出:
NES声音文件("塞尔达传说"由Konchano,版权所有1987任天堂),第1版,8首曲目,NTSC
" NES声音文件"很清楚,但后面跟着一串非结构化数据,这些数据显然只是从文件本身复制而来。恶意用户可以创建一个nsf文件,其中此字符串被" Ogg数据,Vorbis音频"等替换,使分类变得更加困难。
现在让我说我通过丢弃括号内的任何内容来解决这个问题(忽略轨道标题本身可能包含括号的事实),同时还有一个Protracker模块:
4通道Protracker模块声音数据标题:" space_debris"
同样,不受信任的数据直接来自文件,位于不同的位置,现在带有前缀"标题:"。我可以尝试过滤掉它,但实际上这变得很麻烦。
我在手册页中找不到任何帮助。真的没有办法告诉文件不要将这些不安全的字符串混合到它的输出中吗?或者文件根本不适合这项工作?