苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3-含.netcore) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 128|回复: 2

[IIS] C#验证上传的图片是否安全,过滤木马和文件注入式

[复制链接]
发表于 2019-11-28 15:56:21 | 显示全部楼层 |阅读模式
第一种也是我首推的,
这咱方式的原理是将传过来的文件转成图片格式,看是否能正常转换,如果能正常转说明是图片,如果不能那肯定也不会是图片,方法如下
[C#] 纯文本查看 复制代码
/// 判断文件是否为图片
      /// </summary>
      /// <param name="path">文件的完整路径</param>
      /// <returns>返回结果</returns>
    public Boolean IsImage(string path)
    {
        try
        {
            System.Drawing.Image img = System.Drawing.Image.FromFile(path);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }


当然你也可以使用流的方法来验证这种最适合上传中检查,上一个主要是用于上传后的检测

[C#] 纯文本查看 复制代码
        /// 判断文件是否为图片
        /// </summary>
        /// <param name="stream">文件的流</param>
        /// <returns>返回结果</returns>
        public Boolean IsImage(Stream stream)
        {
            try
            {
                System.Drawing.Image img = System.Drawing.Image.FromStream(stream);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }


当然网上肯定也有说第三种,比如
[C#] 纯文本查看 复制代码
/// 根据文件头判断上传的文件类型
     /// </summary>
    /// <param name="filePath">filePath是文件的完整路径 </param>
     /// <returns>返回true或false</returns>
    private bool IsPicture(string filePath)
    {
        try
        {
            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            BinaryReader reader = new BinaryReader(fs);
            string fileClass;
            byte buffer;
            buffer = reader.ReadByte();
            fileClass = buffer.ToString();
            buffer = reader.ReadByte();
            fileClass += buffer.ToString();
            reader.Close();
            fs.Close();
            if (fileClass == "255216" || fileClass == "7173" || fileClass == "13780" || fileClass == "6677")
 
                  //255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch
        {
            return false;
        }
    }

这种说白了,就是虎一下小黑客,根本是治标不治本
发表于 2019-11-28 16:01:24 | 显示全部楼层
发表于 2019-11-28 17:46:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1)

GMT+8, 2019-12-10 14:33

© 2017-2018

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