【发布时间】:2009-02-26 17:48:53
【问题描述】:
如何在不使用文件扩展名或使用 ASP.Net 的 mime 类型的情况下验证文件内容类型。
我不想使用 mime 类型,因为它似乎是由文件扩展名决定的。
【问题讨论】:
如何在不使用文件扩展名或使用 ASP.Net 的 mime 类型的情况下验证文件内容类型。
我不想使用 mime 类型,因为它似乎是由文件扩展名决定的。
【问题讨论】:
您可以在 UrlMon.dll 中使用 FindMimeFromData() 函数(使用 pinvoke)。
见this page for an example和这个MSDN page for the documentation的函数。
【讨论】:
这实际上取决于文件类型。对于许多文件类型,您可以检查文件的标题,它通常在文件中的第一个 0 字符之前。我曾经有一些检查图片类型的代码,所以我可以在某个地方找到它。
但是,有些文件类型没有这种形式的标题,例如 XML(是的,这是一个便宜的例子,但我很容易想到 ;->)。我相信所有图形类型都会有标题,其他二进制文件类型也是如此。
正如 Andrew 所提到的,标题不是 100%。但是,如果文件“格式错误”,则不太可能是黑客攻击。更有可能是损坏的上传或损坏的文件的上传。
【讨论】:
没有通用的方法来验证文件是否属于给定的扩展类型。
您可以创建格式白名单(png、jpg、zip 等)并检查文件头以确定它是否符合预期格式。
即使这样也不是万无一失的,因为文件内容本身可能格式错误,只有在尝试加载文件时才会显现出来。
【讨论】: