来自Fortify扫描的ASP.NET的开放重定向或标头操纵问题

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);

请问还需要进行哪些更改才能解决问题?

2个回答

5

去掉 Server.UrlPathEncode(page.root) 部分,改用 Server.Transfer() 代替 Response.Redirect()

Server.Transfer() 将用户转移到同一站点上的另一个页面,几乎不会意外地将某人引导到另一个站点。

Response.Redirect() 适用于当您想将某人重定向到另一个站点时。

此外,Fortify 不喜欢 Request.Params[],因为它可能存在歧义。一位小心的攻击者可能能够在某些服务器上发送一个 UTF-7 或非打印版本的名称作为请求变量之一,并让变量名称包含实际的 XSS 注入,或者用相同名称的 cookie 覆盖 GET 请求值。确保名称和值都进行了 HTML 编码,并考虑使用 Request.QueryString[parametername] 代替 Request.Params[parametername] 以避免更多与 Fortify 相关的问题。

希望这可以帮助您解决 Fortify 的问题!


0

看来Fortify将Name视为用户定义,并会触发“操作”错误。 如果是这样,请尽可能使用预定义的列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接