Request.UrlReferrer null?

时间:2008-09-29 15:18:12

标签: c# .net visual-studio visual-studio-2008

在aspx C#.NET页面(我正在运行框架v3.5)中,我需要知道用户来自哪里,因为他们无法登录而无法查看页面。如果我有页面A(页面用户想要查看)重定向到页面B(登录页面),Request.UrlReferrer对象为空。

背景:如果用户未登录,我将重定向到“登录”页面(此方案中为B)。登录后,我想将它们返回到他们被迫登录之前请求的页面。

更新
一个很好的快速解决方案似乎是:
//if user not logged in Response.Redirect("..MyLoginPage.aspx?returnUrl=" + Request.ServerVariables["SCRIPT_NAME"]);
然后,只需在登录页面上查看您强制使用的QueryString,并将用户置于成功登录后的位置。

4 个答案:

答案 0 :(得分:29)

UrlReferrer基于浏览器发送的HTTP_REFERER标头。但是,正如所有事情都留给了客户,它是可变的。

我知道一些“安全”套件(如Norton的Internet Security)将剥离该标头,因为它相信它可以帮助跟踪用户行为。此外,我确信有一些Firefox扩展可以做同样的事情。

底线是你不应该相信它。只需将网址附加到GET字符串并重定向即可。

更新:正如评论中所提到的,将重定向从GET参数限制为仅适用于无域相关链接,拒绝目录模式(../)等可能是个好主意。所以仍然要进行健全性检查重定向;如果您遵循标准“不要盲目使用任何用户提供的输入”规则,那么您应该是安全的。

答案 1 :(得分:11)

如果您使用标准的成员资格提供程序,并设置目录/页面的授权,代码将自动设置ReturnUrl的查询参数并在成功登录后重定向。

如果您不想要使用Membership provider模式,我建议手动执行查询字符串参数。 HTTP引用不是很可靠。

答案 2 :(得分:2)

问题可能与您如何将用户重定向到其他页面有关。无论如何,引用网址不是你应该采取的绝对规则 - 客户可以轻易地伪造它。

答案 3 :(得分:2)

您最需要的是查询字符串变量(例如returnURL或originURL)。 Referrer最适合用于数据挖掘操​​作,因为它非常不可靠。

有关示例,请参阅ASP.Net使用登录重定向的方式。