苏飞论坛

标题: C#验证上传的图片是否安全,过滤木马和文件注入式 [打印本页]

作者: 站长苏飞    时间: 2019-11-28 15:56
标题: C#验证上传的图片是否安全,过滤木马和文件注入式
第一种也是我首推的,
这咱方式的原理是将传过来的文件转成图片格式,看是否能正常转换,如果能正常转说明是图片,如果不能那肯定也不会是图片,方法如下
[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;
        }
    }

这种说白了,就是虎一下小黑客,根本是治标不治本

作者: clrscr    时间: 2019-11-28 16:01
好东西,支持!
作者: zncliving    时间: 2019-11-28 17:46
这个可以有




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4