ASP.NET中上传图片检测其是否为真实的图片 防范病毒上传至服务器

2024-06-20 23:08

本文主要是介绍ASP.NET中上传图片检测其是否为真实的图片 防范病毒上传至服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、需求

我们在用.net开发网站时,经常会用到图片上传,可以说是每个网站必备的,大到门户网站,电商网站,政务系统,OA系统,小到企业网站,个人网站,博客网站,导航网站等等,都有用到图片上传,那么在客户端浏览器中上传图片,不可避免有些不法分子将病毒伪装图片文件,然后上传到我们的网站服务器,这样造成网站崩溃。为了解决这个问题,我们在程序中先过滤,就有了接下来的文章。

二、主要代码

1、MVC中

我们就来上传一个头像,在MVC中怎么实现文件上传,请查看我的文章:【MVC系列】ASP.NET MVC中如何实现文件上传 FileUpLoad

       /// <summary>/// 上传头像/// </summary>/// <param name="userId">用户编号</param>/// <returns>Json(-1表示系统异常,-2表示文件不合法)</returns>[HttpPost] public JsonResult Upload(string userId){//上传头像的路径string folderPath = "/upload/avatar/";//判断路径是否存在if (!Directory.Exists(folderPath))Directory.CreateDirectory(folderPath);//创建文件路径HttpPostedFileBase uploadFile = Request.Files["avatars"];if (uploadFile != null){string oriFileName = uploadFile.FileName;//原始文件名string fileName = userId + "_" + oriFileName;//文件名的格式:用户Id+文件名uploadFile.SaveAs(Server.MapPath(folderPath + fileName));//保存到服务器FileStream fs = new FileStream(Server.MapPath(folderPath + fileName), FileMode.Open, FileAccess.Read);BinaryReader reader = new BinaryReader(fs);string fileClass;byte buffer;byte[] b = new byte[2];buffer = reader.ReadByte();b[0] = buffer;fileClass = buffer.ToString();buffer = reader.ReadByte();b[1] = buffer;fileClass += buffer.ToString();reader.Close();fs.Close();if (fileClass == "255216" || fileClass == "7173" || fileClass == "6677" || fileClass == "13780"){//255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar //Response.Write("图片可用"); //保存到数据库中}else{//Response.Write("图片非法"); FileInfo f = new FileInfo(Server.MapPath(folderPath + fileName));f.Delete(); //删除文件return Json(-2, JsonRequestBehavior.AllowGet);}return Json(Server.HtmlEncode(folderPath + fileName), JsonRequestBehavior.AllowGet);}return Json(-1, JsonRequestBehavior.AllowGet);}

2、WebForm中

public void UploadFile() {try {HttpPostedFile postfile = Request.Files["file"];string savepath = Server.MapPath("/upload/avatar/" + postfile.FileName);postfile.SaveAs(savepath);FileStream fs = new FileStream(savepath, FileMode.Open, FileAccess.Read);BinaryReader reader = new BinaryReader(fs);string fileClass;byte buffer;byte[] b = new byte[2];buffer = reader.ReadByte();b[0] = buffer;fileClass = buffer.ToString();buffer = reader.ReadByte();b[1] = buffer;fileClass += buffer.ToString();reader.Close();fs.Close(); if (fileClass == "255216" || fileClass == "7173" || fileClass == "6677" || fileClass == "13780") {//255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar //Response.Write("图片可用"); //保存到数据库中}else {//Response.Write("图片非法"); File.Delete(savepath); //删除文件return;}}catch (Exception) { //Response.Write("图片非法!"); return;throw;}}

3.用image对象判断是否为图片

/// 
/// 判断文件是否为图片
/// 
/// 文件的完整路径
/// 返回结果
public Boolean IsImage(string path)
{
try
{System.Drawing.Image img = System.Drawing.Image.FromFile(path);return true;
}
catch (Exception e)
{return false;
}
}

三、总结

当然,这个只是防范病毒的一个很小的举措,技术不深奥,当然我这里写的过滤有个很大的缺陷,是先把文件上传上服务器,然后再检测,这样也不安全,可以在上传之前先检测,大家自己去实现哈。当然,上传文件要保证服务器的安全还有很多需要做的,比如在服务器中安装杀毒软件定时监测新增文件。还有硬件防火墙很多,在这里不再阐述。

在本章中如果在MVC中文件上传无从下手的同学,可以学习到文件上传,源码中采用swfupload上传,它可以支持多文件上传。具体实现请在文章末尾下载源代码。给大家布置一个作业,作进一步思考,怎么实现跨域或分布式上传文件。(作业的需求:网站文件服务器与Web服务器分离,用户上传文件的时候,我们把文件存取到文件服务器中,如果文件服务器磁盘已满,该作怎么处理?当然还有如果多用户同时上传文件,对磁盘写入,我们服务器配置无法满足现有的并发写入,我们需要考虑多文件服务器,多文件服务器,那么我们在上传文件又该做怎么处理呢?这里就涉及负载均衡和分布式)

这篇关于ASP.NET中上传图片检测其是否为真实的图片 防范病毒上传至服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079520

相关文章

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1