由于API的限制,我有几个在.NET 3.5上运行的网站。我们最终将在今年将这些站点移至最新的.NET版本。渗透测试之一表明可能存在XSS漏洞。有问题的网址是:


  位置:http://www.foobar.com/basket.aspx/scripts/searchresults.aspx
  
  方法:GET
  
  易受攻击的参数:任意提供的URL参数的名称


基本上,basket.aspx之后的任何内容(例如scripts/searchresults.aspx)都会导致此问题。根据我的判断,Request.PathInfo将尝试查找路径并最终到达searchresults.aspx(如果存在.aspx页),但是由于相对路径而找不到我的所有CSS和脚本。该页面实际上中断了。目前尚不清楚这如何导致XSS漏洞。但是,它确实会破坏页面。

我的问题:是否需要Request.PathInfo?在我的初步测试中,如果我选中Request.PathInfo,则可以确定它可能是错误的URL请求:

FooBar.Global pageObj = obj;

if (obj.Request.PathInfo.Length > 0)
{
   Response.Redirect("~/sitemap.aspx", true); // bad url send to site map
}

最佳答案

是否需要Request.PathInfo


ASP.NET WebForms不需要PathInfo。 It can be helpful for search engine optimization,但是如果您不使用它,请继续并禁用它。您可以添加代码段,也可以安装UrlScan并将AllowDotInPath选项设置为0。


  这怎么会导致XSS漏洞?


如果满足所有以下条件,则您的页面可能容易受到Relative Path Overwrite (RPO)攻击:


攻击者可以在页面的某处注入内容(例如,博客评论)。
您的页面通过相对路径引用CSS样式表。
启用了PathInfo。


通过将PathInfo附加到URL,攻击者可以使您的页面作为样式表加载,因为ASP.NET会将Page.aspx / Master.css解析为Page.aspx,而不是Master.css。由于CSS的解析规则不严格(设计使然),攻击者的内容可能会被解释为有效的CSS,这对于允许JavaScript使用CSS的Internet Explorer旧版本尤其不利。即使在现代浏览器中,恶意样式表也可能注入误导其他用户的内容。


  我想使用PathInfo。如何缓解此漏洞?


使用绝对路径引用所有CSS样式表。例如,您可以使用应用程序相对路径(以~/开头的虚拟路径)调用ResolveUrl方法:

<link href='<%= this.ResolveUrl("~/App_Themes/MySite/Master.css") %>' rel="stylesheet" type="text/css" />


注意:不要使用ResolveClientUrl方法,因为它会返回相对路径。

关于c# - Request.PathInfo问题和XSS攻击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42211237/

10-11 11:55