从 asp.net 上的 Fortify 扫描打开重定向或标题操作问题

Posted

技术标签:

【中文标题】从 asp.net 上的 Fortify 扫描打开重定向或标题操作问题【英文标题】:Open Redirect or Header Manipulation issues from Fortify scan on asp.net 【发布时间】:2011-08-10 05:46:01 【问题描述】:

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

有人可以让我知道还需要在此处进行更改以解决问题吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于从 asp.net 上的 Fortify 扫描打开重定向或标题操作问题的主要内容,如果未能解决你的问题,请参考以下文章

如何基于Fortify扫描结果使TFS构建失败

如何区分 Fortify SCA 扫描

如何针对跨站点脚本清理查询字符串输入 - 反映 ASP .Net(Web 窗体)应用程序中的问题?

从 asp.net 扫描图像

wvss漏洞扫描和fortify漏洞扫描的区别

从 ASP.Net 扫描图像