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

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.