从asp.net上的Fortify扫描打开Redirect或Header Manipulation问题

时间:2011-04-21 11:12:02

标签: asp.net security redirect fortify

我们在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);

有些机构可以让我知道还需要更改此处以解决此问题吗?

2 个答案:

答案 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视为用户定义,并且会触发“操纵”错误。如果确实如此,请尝试使用预定义列表。