由于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/