我有以下代码:
if (Request.UrlReferrer != null)
{
if (Request.UrlReferrer.PathAndQuery.ToLowerInvariant() == "/test/content.htm")
{
postbacklink = Request.UrlReferrer.AbsoluteUri.Replace("/TEST/Content.htm", "/Testing.aspx?") + Request.QueryString;
}
else
{
postbacklink = Request.UrlReferrer.AbsoluteUri;
}
}
ExtendedLoanView.PostbackLink = postbacklink;
现在可以通过两个不同的位置访问此页面。这意味着这段代码:
postbacklink = Request.UrlReferrer.AbsoluteUri.Replace("/TEST/Content.htm", "/Test.aspx?") + Request.QueryString;
只能使用一个页面(Test.aspx)并且是硬编码的。所以在IE7中Request.UrlReferrer告诉我这个:
Request.UrlReferrer = {http://Testing:12345/PPP/Content.htm}
然而在IE8 +中,我得到了这个值:
Request.UrlReferrer = {http://Testing:12345/PPP/TestingPage.aspx?Name=Xyz&Address=123 YYY
我该如何解决这个问题?它过去一个月一直困扰着我。
答案 0 :(得分:1)
我绝对建议不要将您的逻辑基于请求信息(不仅仅是用户输入的值)。问题是将在不同的浏览器中有所不同,而且它确实是可以破解的。
如果您仍需要将信息从客户端传递到服务器,请确保已经验证了这些信息。如果您需要保持同步并拥有有效信息,请不要依赖浏览器提供给您的信息,而是自己设置然后从您设置的请求中的某个位置(例如,隐藏的输入,控件) ,viewstate上的变量,或任何允许您使用的技术的变量。
大多数网站通过在查询参数中传递URL本身中的目标网址来处理您尝试解决的情况。例如:
http://www.example.com/Login.aspx?returnUrl=/TEST/content.htm
编辑:我确实知道您发送给客户端的所有内容都是非常黑客的,但如果您自己设置,则更容易验证它没有被篡改。一个例子是ViewState验证方法。