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

相关文章

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O