0

我有一个 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 是文本文件的名称),则创建 TestBitmap 会失败,但显然这不会阻止带有恶意代码的图像文件作为图像加载,因此保存它作为 MemoryStream 然后将流写入字节数组(稍后保存在数据库中)据说可以解决这个问题。

4

1 回答 1

0

为避免人们使用将照片上传到您的网站的功能传递程序和其他信息,您可以执行两个主要步骤。

  1. 使用您的代码再次读取并保存图像以删除其他任何内容。
  2. 将每个图像的大小限制为一个逻辑数字。

为了避免有人上传错误代码并在您的服务器上运行它,您保留了一个隔离文件夹,没有运行任何东西的权限。更多信息关于:

我被黑了 上传的邪恶 aspx 文件名为 AspxSpy。他们还在努力。帮我困住他们‼</a>

还有一个关于同一主题的一般主题:为渗透测试准备一个 ASP.Net 网站

于 2013-02-27T16:29:18.473 回答