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

相关文章

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函