从URL获取完整字符串,包括非查询字符串 C#

4

我有一个名为default.aspx的页面。
当用户浏览此页面时,如下所示 -

www.mysite.com/default.aspx/?&#&emp=1']];alert(2);[['1

会弹出警报。为了防止这种攻击,我想获取在浏览器中键入的整个字符串,但无法获取。

[注意:正如您所看到的,问号后面的文本不一定是查询字符串。这里是随机字符。如果它是一个查询字符串,我可以在代码中获取它。]

protected void Page_Load(object sender, EventArgs e)
{
  string query = HttpContext.Current.Request.ServerVariables["URL"] +                      
                 HttpContext.Current.Request.ServerVariables["PATH_INFO"] + 
                 HttpContext.Current.Request.ServerVariables["QUERY_STRING"];
}

在“query”中,我只获得/default.aspx/default.aspx/&

我该如何获得在地址栏中键入的整个字符串。

更新:

HttpContext.Current.Request.Url.AbsoluteUri返回?& HttpContext.Current.Request.Url.ToString() 返回 http://mysite/default.aspx/?&

这不是那个问题的重复,因为我的问题有一些不是查询字符串的字符,并且那个问题中的解决方法并没有解决我的问题。谢谢。

解决方案: 可能会帮助到有相似问题的人。 解决方法是在客户端处理。我从未知道#后面的部分不会发送到服务器端。 AmateurProgrammer和shadowed提供了非常棒的建议。谢谢。


1
获取整个URL作为字符串如何防止攻击?在任何情况下,可能会使用Request.Url - user2864740
1
你尝试过使用 Request.Url 吗? - Irshad
类似于 HttpContext.Current.Request.Url.AbsoluteUri 的东西? - Joachim Isaksson
1
我猜你没有看到整个文本,因为IIS/ASP.NET正在为你防御一次攻击。 - Simon Mourier
1
如果&后面的部分在客户端作为JavaScript执行,那么它怎么可能成为URL的一部分呢?我的建议是在客户端检测这个字符串并自行处理。 - Bhushan Shah
显示剩余2条评论
1个回答

3
< p >#后面的部分(包括 #)是URI片段,标准情况下不会发送给服务器。它应该被浏览器使用,如果有一个与片段id相等的元素,浏览器将滚动到该元素。 现在,它也被用作向页面上的JavaScript传递参数的方法。 可以通过JavaScript间接地在服务器上获取片段,但只能在页面加载后才能获取。


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