我有一个ASP。NET web应用程序,允许用户从他的PC上传文件到SQL Server数据库(稍后用于生成标签的图像)。是否有一种"简单"的方法在。net中测试图像,以验证它在保存之前不包含任何恶意内容?
现在,我用这个:
MemoryStream F = new MemoryStream();
Bitmap TestBitmap = new Bitmap(Filename);
TestBitmap.Save(F, System.Drawing.Imaging.ImageFormat.Png);
int PhotoSize = (int)F.Length;
Photo = new byte[PhotoSize];
F.Seek(0, SeekOrigin.Begin);
int BytesRead = F.Read(Photo, 0, PhotoSize);
F.Close();
创建TestBitmap失败,如果它不是一个图像(例如,如果Filename是一个文本文件的名称),但显然这并不能阻止一个文件,是一个带有恶意代码的图像附加到它加载为图像,因此将其保存为MemoryStream,然后将流写入字节数组(稍后保存在数据库中)据说修复了这个。
为了避免别人利用上传照片的功能来传递程序和其他信息,你可以采取两个主要步骤。
- 读取并再次保存图像与您的代码,以删除任何其他。
- 将每个图像的大小限制为一个逻辑数字。
为了避免有人上传错误的代码并在你的服务器上运行它,你保留一个单独的文件夹,不允许运行任何东西。更多信息请参见:
我被黑了。邪恶的aspx文件上传称为AspxSpy。他们仍在努力。帮我逮住他们!
和同一主题的一般主题:准备ASP。Net网站渗透测试