Fortify跨站点脚本:Response.Binarywrite中的永久性问题

时间:2019-03-22 11:00:20

标签: asp.net xss fortify cross-site

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

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

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

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

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

    Response.BinaryWrite(ValidateFileType(img));

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

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

1 个答案:

答案 0 :(得分:0)

必须使用替代方法来解决此问题,下面是新旧代码-

旧代码-

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

新代码(用旧代码替换旧代码中的第二行)-

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扫描。 如果有人在寻找解决方案,这可能会有所帮助。