对上传的图片进行格式校验以及安全性校验

时间:2021-01-05 12:23:59   收藏:0   阅读:80

对上传的图片进行格式校验以及安全性校验

图片上传服务器后,需要对其进行安全校验

判断上传的是否是图片

通过后缀名进行判断

public static bool CheckUpLoadFileExtension(string fileName)
{
    string fileExtension = System.IO.Path.GetExtension(fileName).Trim().ToLower();

    // 允许的文件后缀
    HashSet<string> hs = new HashSet<string> { ".bmp", ".gif", ".png", ".jpeg", ".jpg" };

    return hs.Contains(fileExtension);
}

通过文件头

/// <summary>
/// 图片类型帮助类
/// </summary>
public class ImageFormatHelper
{

    /// <summary>
    /// 获取图片类型
    /// </summary>
    /// <param name="bytes"></param>
    /// <returns></returns>
    public static PictureFormat GetPictureFormat(byte[] bytes)
    {
        if (bytes == null || bytes.Length < 2)
        {
            return PictureFormat.UNKNOWN;
        }

        if (Enum.TryParse($"{bytes[0]}{bytes[1]}", out PictureFormat format))
        {
            if (Enum.IsDefined(typeof(PictureFormat), format))
            {
                return format;
            }
        }

        return PictureFormat.UNKNOWN;
    }


    public enum PictureFormat
    {
        BMP = 6677,
        GIF = 7173,
        WEBP = 8273,
        PNG = 13780,
        JPG = 255216,
        UNKNOWN = 0
    }

}

// 判断图片类型
PictureFormat imageFormat = ImageFormatHelper.GetPictureFormat(uploadFileBytes);

if (imageFormat != PictureFormat.GIF
    && imageFormat != PictureFormat.JPG
    && imageFormat != PictureFormat.PNG)
{
    result = $"图片格式为 {imageFormat} ,请重新上传";
    return result;
}

通过 ImageIO 判断

System.Drawing.Image MyImage = System.Drawing.Image.FromStream(file.InputStream);

图片文件的安全检查处理

通过上面的方法,确认上传的文件是图片了,但是如果在可以正常打开的图片里面加入非法代码或者病毒,那就非常危险了。

那么怎么可以预防这种情况,既能够正常打开,又能获取图片的宽高等属性,可以对图片进行重写,新生成的图片不会有这种恶意代码了。

给图片加水印

可以将透明度调为0,乍一看跟原图一样,其实不是上面的那张原图了

备注

参考链接

原文:https://www.cnblogs.com/frank-zhang/p/14234689.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!