在现有的Asp.Net应用程序中,我们使用Response.BinaryWrite在aspx页面上呈现图像。这是必需的功能,下面是C#代码-
1. byte[] img = getImage();
2. Response.BinaryWrite(img);
getImage函数从服务器上的文件夹读取图像并返回字节数组。 Fortify扫描在第二行显示跨站点漏洞。
我确实进行了以下验证,但是fortify仍将其报告为跨站点问题-
经过验证的字节数组,用于检查文件的格式是否正确(jpeg或bmp),使用此链接-Determine file type of an image
Response.BinaryWrite(ValidateFileType(img));
验证文件路径中的域,以检查文件是否源自正确的域。
是否有通过字节数组传递强化跨站点问题的特定方法,还是可以将其视为误报?
答案 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扫描。 如果有人在寻找解决方案,这可能会有所帮助。