从 C# 中的字节 [] 获取内容类型 [关闭]
Posted
技术标签:
【中文标题】从 C# 中的字节 [] 获取内容类型 [关闭]【英文标题】:Get content type from byte[] in C# [closed] 【发布时间】:2017-04-13 22:09:19 【问题描述】:如何从 c# 中的 byte[] 或 Base64String 获取内容类型(MIME 类型)? (Asp.Net Core)
我的 web api 正在接收在 JSON 对象中发送的文件。该文件以 Base64String 编码。我的第一步是将这个 base64string 转换为字节数组,然后执行验证。验证之一是检查它是否是有效文件。为此,我需要检查其内容类型。
private bool validateContent (byte[] content)
//Get mime content type from content
【问题讨论】:
Content-Type
应作为标头发送。它不会在数据本身中。你的 JSON 对象是什么样的?
@DanWilson:我认为他想从以字节形式发送的任何数据中获取 mimetype(即二进制文件,如 excel xlsx、xls、图像,而不信任客户端发送的内容等),即通常是它的客户端以application/octet-stream
发送压缩文件很常见,就像一些邮件客户端一样,它不知道它到底是什么类型)
我知道,我是说仅从字节流中是不可能的,除非您想扫描数据中的文件类型标记,这是不可靠且容易出错的。 ***.com/questions/1654846/…
JSON 像这样发送到 API:"Attachments": [ "name": "sample.pdf", "content": "Base64String" ],
假设你可以信任文件扩展名,在这种情况下你有application/pdf
。但这也是不可靠的。您必须有一个可靠的映射并相信发件人使用相同的映射。
【参考方案1】:
您只需检查文件签名(幻数)即可,例如 HEX 或 ASCII。您可以在https://en.wikipedia.org/wiki/List_of_file_signatures 或http://www.garykessler.net/library/file_sigs.html 找到签名列表
不要相信请求头Content-Type
,因为它很容易被用户欺骗
【讨论】:
文件签名也可以被欺骗。当然,文件扩展名也可以。没有安全的方法。 当然,但如果您欺骗文件签名/扩展文件,解释器可能会误读并最终不会执行。欺骗请求标头 Content-Type 要危险得多。半安全将检查文件签名和扩展名以上是关于从 C# 中的字节 [] 获取内容类型 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章