有可能将.exe文件重命名为.txt文件以绕过任何文件类型验证。我正在寻找一种方法来通过读取文件的标题来找出实际的文件类型,而不使用像urlmon.dll这样的dll。
MimeMapping.GetMimeMapping没有解决问题,只是根据扩展名提取mime类型。
是否有一个字典说明哪些字节组合至少代表了非常常见的文件类型,如txt,doc,docx,pdf,xls或xlsx,exe等?
答案 0 :(得分:1)
我认为你回答了自己的问题。
这有点像泡菜。
读取文件头签名,看它是否与其扩展名匹配。使用FileStream
或类似的。
将此与Tommy DDD的答案相结合,我认为你已经确定了。
答案 1 :(得分:0)
这不是最优雅的解决方案,但请查看此答案。 How can I determine if a file is binary or text in c#?您可以通过psudo检查文件是二进制还是文本。
在评论中有人检查连续4个零字节。 \ 0 \ 0 \ 0 \ 0这往往表示二进制文件,因为我们不经常输入NULL字符。