我们在ASP.net应用程序上进行了Fortify扫描。我们发现有很多标头操作问题。所有问题都指向Response.Redirect()。请看下面我编码参数的代码。即使这样,下面的代码也算作标题操作问题。
int iCount = 0;
foreach (string Name in Request.QueryString.Keys)
{
iCount++;
if (iCount > 1)
{
url += "&";
}
url += Name;
if (Request.Params[Name]!=null)
{
url += "=" + AntiXss.UrlEncode(Request.Params[Name]);
}
}
Response.redirect(Server.UrlPathEncode(page.root) + "\Test.aspx?" + url);
有些机构可以让我知道还需要更改此处以解决此问题吗?
答案 0 :(得分:5)
取消Server.UrlPathEncode(page.root)
部分并使用Server.Transfer()
代替Response.Redirect()
。
Server.Transfer()
将用户转移到同一网站上的另一个网页,并且几乎没有意外将某人引导到另一个网站的危险。
Response.Redirect()
适用于您想将某人重定向到其他网站的时间。
此外,Fortify不太喜欢Request.Params[]
,因为它可能含糊不清。在某些服务器上,细心的攻击者可能会将UTF-7或非打印版本的名称作为请求变量之一发送,并让变量的名称包含实际的XSS注入,或覆盖GET请求使用相同名称的cookie的值。确保名称和值都是htmlencoded,并考虑使用Request.QueryString[parametername]
而不是Request.Params[parametername]
来避免Fortify出现更多问题。
希望这会让你超越你的Fortify问题!
答案 1 :(得分:0)
似乎Fortify将Name视为用户定义,并且会触发“操纵”错误。如果确实如此,请尝试使用预定义列表。