3

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

有人可以让我知道这里还需要改变什么来解决问题吗?

4

2 回答 2

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 问题!

于 2012-11-09T22:55:09.803 回答
0

似乎 Fortify 将名称视为用户定义,这将触发“Manupulation”错误。如果是真的,请尽可能使用预定义列表。

于 2011-05-10T18:10:40.450 回答