Request.UrlReferrer在IE7中不起作用

时间:2012-01-13 16:40:49

标签: c# c#-4.0

我有以下代码:

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

我该如何解决这个问题?它过去一个月一直困扰着我。

1 个答案:

答案 0 :(得分:1)

我绝对建议不要将您的逻辑基于请求信息(不仅仅是用户输入的值)。问题是在不同的浏览器中有所不同,而且它确实是可以破解的。

如果您仍需要将信息从客户端传递到服务器,请确保已经验证了这些信息。如果您需要保持同步并拥有有效信息,请不要依赖浏览器提供给您的信息,而是自己设置然后从您设置的请求中的某个位置(例如,隐藏的输入,控件) ,viewstate上的变量,或任何允许您使用的技术的变量。

大多数网站通过在查询参数中传递URL本身中的目标网址来处理您尝试解决的情况。例如:

http://www.example.com/Login.aspx?returnUrl=/TEST/content.htm

编辑:我确实知道您发送给客户端的所有内容都是非常黑客的,但如果您自己设置,则更容易验证它没有被篡改。一个例子是ViewState验证方法。