在.NET Core / ASP

时间:2017-08-26 19:41:54

标签: c# asp.net image validation asp.net-core

如何检查上传到我服务器的图像实际上是否为有效图像?

我可以检查大小和扩展名,但没有什么能阻止用户将不受支持的文件的文件扩展名更改为支持的文件(例如.jpg或.png)。

据我所知,ASP.NET有Drawing.Image,但.NET Core似乎缺少我可以使用的东西。

我可以为第三方解决方案提供一些建议吗?

3 个答案:

答案 0 :(得分:3)

安装nuget Package CoreCompat.System.Drawing然后您可以像往常一样在.Net Core项目中使用System.Drawing

using System.Drawing;

答案 1 :(得分:1)

这不会验证整个图像,但您可以检查文件的前几个字节,以确保它包含有效的JPGPNG标头。这将阻止除一小部分用户上传虚假图像之外的所有用户,并防止您花费资源将整个图像加载到内存中进行检查。

答案 2 :(得分:1)

使用CoreCompat.System.Drawing我已经对图像有效性进行了简单检查,如下所示。如果“图像”无法打开,那么它就是腐败或伪造的,并会抛出一个我正在捕捉的异常 我很感激try / catch不应该用于验证或逻辑,但这是我能想到的最好的解决方案。

try
{
    var img = System.Drawing.Image.FromStream(file.OpenReadStream());
}
catch
{
    // bad image
}