从 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 扫描打开重定向或标题操作问题的主要内容,如果未能解决你的问题,请参考以下文章