犯罪分子可以伪造他上传的文件的内容类型.所以,如果我通过我的页面在服务器上收到文件,我不能只检查它的MIME类型和文件扩展名.有没有可靠的方法来检查上传的文件实际上是JPEG,GIF还是PNG?我需要拒绝所有其他格式.我可以尝试一点一点地读取文件,但我在寻找什么?感谢您的任何建议或想法!
您可以尝试使用Bitmap.FromStream(stream)上传图像中的流来解析try-catch中的图像.如果它失败了,你知道它不是真实的形象.它被认为是异常编码,但在这种情况下,您实际上是在寻找异常.
最简单的方法是检查输入流的标题并查找特定的签名:
ASP.NET中的示例
bool isValid = false;
char[] header = new char[10];
StreamReader sr = new StreamReader(Request.InputStream);
sr.Read(header, 0, 10);
// check if JPG
if (header[0] == 0xFF && header[1] == 0xD8)
{
isValid = true;
}
// check if GIF
else if (header[0] == 'G' && header[1] == 'I' && header[2] == 'F')
{
isValid = true;
}
// check if PNG
else if (header[0] == 137 && header[1] == 80 && header[2] == 78 && header[3] == 71 && header[4] == 13 && header[5] == 10 && header[6] == 26 && header[7] == 10)
{
isValid = true;
}
Run Code Online (Sandbox Code Playgroud)
当然你必须处理异常