【问题标题】:A solution to validate a file type using magic number in file signature (.NET)?使用文件签名(.NET)中的幻数验证文件类型的解决方案?
【发布时间】:2011-06-17 20:52:25
【问题描述】:
我想验证上传文件的类型(假设文件的扩展名不正确)。
我认为这可以通过检查文件签名的幻数来完成。同样,它是done in unix。所以我想我需要读取文件的第一个字节并将它们与幻数映射进行比较(并且我需要拥有这些映射并且我需要维护它们)。
所以我想也许有一个专门为此目的的课程?或者也许有人已经这样做了,并且可以分享他们对解决方案的见解?谢谢
【问题讨论】:
标签:
.net
file-upload
file-type
【解决方案1】:
我怀疑这个问题是否有“灵丹妙药”的解决方案。没有人说每种文件格式都有任何形式的幻数。考虑纯文本文件 - 根本没有合理的指示(除了开头可能的字节顺序标记,然而,这并不意味着什么)并且必须使用纯启发式来猜测它是纯文本文件。像识别 XML 或 HTML(即 SGML)文件一样明智,这意味着检查很多可能性。
您应该遵循的方法是:
- 缩小预期文件格式的范围。
- 要么根据您需要支持的文件格式的整体结构和/或特性的知识自行动手,要么寻找类似GNU File rerun 提到的解决方案。您也可以在 MagicDB 之类的网站上查看 - 但是,这个网站特别过时(2005 年)。
- 指定意外文件格式的行为。
如果设置“足够”狭窄,我会考虑一个简单的自定义解决方案作为正确的解决方案。