验证上传的文件是图像

时间:2016-10-24 19:07:40

标签: c# image upload .net-core

我将接受.NET Core 1.0.1中新网站上的用户上传。我只想允许图像,而不仅仅是任何文件。如何在.NET Core中执行此验证?是否可以不使用If frm.option1.Value = True Then strBcc = "xxx@xxxx.com" ,因为它没有实现?

This answer看起来很有希望,但最终会使用System.Drawing。是否足以检查内容类型和扩展名?

编辑:接受的答案是我需要的,但我会在这里分享我的实际实施。我在.NET Core中这样做,但我非常确定相同的代码适用于完整的框架。

System.Drawing

1 个答案:

答案 0 :(得分:4)

仅检查文件扩展名是不够的。我可以创建一个ZIP文件,然后只需将扩展名重命名为.jpg,您就认为它是一个有效的文件。

图像格式在它们的开头确实有“魔术字节”,您可以使用它来潜在地识别文件实际上是图像。 This Wikipedia entry here has a list of magic numbers you could check against

另请注意,内容类型可能是欺骗性的。

所以你有两件事你可以做。原始答案中指定的内容类型,结合检查文件的“幻数”。如果有人真的想要上传不是图像的duff数据并绕过这些检查,你可能需要做其他事情。

因此,您可以实施3个已知警卫:

  1. 文件是否在您的白名单上有扩展名? (.JPG / .JPEG /等...)
  2. 内容类型是否与白名单中的条目匹配? (图像/ JPEG)
  3. 一旦你通过前两个步骤确定了哪种文件,魔术数字也会匹配吗?