Fortify 跨站点脚本:Response.Binarywrite 中的持续性问题

Fortify Cross-site scripting: Persistent issue in Response.Binarywrite

在现有的 Asp.Net 应用程序中,我们使用 Response.BinaryWrite 在 aspx 页面上呈现图像。这是必需的功能,下面是C#代码-

1. byte[] img = getImage();
2. Response.BinaryWrite(img);

getImage 函数从服务器上的文件夹和 returns 字节数组中读取图像。 Fortify 扫描在第二行显示跨站点漏洞。

我进行了以下验证,但 fortify 仍将其报告为跨站点问题 -

  1. 验证字节数组以检查文件格式是否正确(jpeg 或 bmp),使用此 link - Determine file type of an image

    Response.BinaryWrite(验证文件类型(img));

  2. 验证文件路径中的域以检查文件是否来自正确的域。

是否有任何特定方法可以通过字节数组传递强化跨站点问题,或者我可以将其视为误报吗?

不得不使用变通方法解决这个问题,下面是旧代码和新代码 -

旧代码 -

1. byte[] byteImage = getImage();
2. Response.BinaryWrite(byteImage);

新代码(将旧代码中的第 2 行替换为以下块)-

byte[] byteImage = getImage();
var msIn = new MemoryStream(byteImage);
System.Drawing.Image img = System.Drawing.Image.FromStream(msIn);

var msOut = new MemoryStream();
img.Save(msOut, img.RawFormat);
Response.BinaryWrite(msOut.ToArray());

msIn.Dispose();
msOut.Dispose();
Response.Flush();

所以,基本上将 byteArray 转换为 Image 对象,然后将图像对象写回 Response.BinaryWrite 流解决了这个问题,它通过了 Fortify 扫描。 如果有人正在寻找解决方案,这可能会有所帮助。