架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1131|回复: 2

[资料] .NET/C# 根据文件头部 byte[] 校验上传文件

[复制链接]
发表于 2023-5-23 22:35:24 | 显示全部楼层 |阅读模式
需求:今天浏览到之前同事写的一篇文章,根据“C#根据byte前两位获取图片扩展名”,之前也了解过基于 TrID 来识别文件格式。

首先,通过读取文件头前2个字节来获取文件格式(其实也不能完全相信文件头,毕竟文件可以任意伪造),如下图:

QQ截图20230523221612.jpg

TrID 是一种实用程序,旨在根据二进制签名识别文件类型。虽然有类似的硬编码逻辑实用程序,但 TrID 没有固定规则。相反,它是可扩展的,并且可以被训练以快速和自动的方式识别新格式。
查看文件类型网址:https://mark0.net/soft-trid-deflist.html

还是以 jpg 类型为例,尝试读取一张本地的 QQ 截图,Header Hexdump(https://file-extension.net/seeker/file_extension_jpg) 如下图:

QQ截图20230523222224.jpg

再测试一个 exe 类型的文件,如下图:

QQ截图20230523222748.jpg

代码如下:

利用读取文件头的方法可以简单过滤用户提交的文件类型是否符合要求(还是那句话:文件能伪造,但是能防止大部分小白上传不符合要求的文件),例如:只允许上传 word 文档,别人将 .txt 文件格式改成 .docx 格式上传就能校验通过???

(完)





上一篇:Aspose(一)Aspose.Words 将表格填充到 word 文档
下一篇:.NET/C# 语法之 goto 语句
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-6-9 22:30:06 | 显示全部楼层
.NET/C# 之 Stream 读取磁盘文件内存优化
https://www.itsvse.com/thread-10608-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-9-9 21:29:51 | 显示全部楼层
文件签名验证
文件的签名由文件开头部分中的前几个字节确定。 可以使用这些字节指示扩展名是否与文件内容匹配。 示例应用检查一些常见文件类型的文件签名。 在下面的示例中,在文件上检查 JPEG 图像的文件签名:

参考链接:https://learn.microsoft.com/zh-cn/aspnet/core/mvc/models/file-uploads

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-30 03:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表