Request.UrlReferrer为空?
在aspx C#.NET页面(我正在运行框架v3.5)中,我需要知道用户来自何处,因为他们无法在不登录的情况下查看页面。如果我有页面A
(用户要查看的页面) )重定向到页面" B"(登录页面),Request.UrlReferrer对象为null。
背景:如果用户未登录,我将重定向到"登录"页面(在这种情况下为" B")。登录后,我想将他们返回到他们被迫登录之前所请求的页面。
更新:
一个不错的快速解决方案似乎是://如果用户未登录 Response.Redirect(" .. MyLoginPage.aspx?returnUrl =" + Request.ServerVariables [" SCRIPT_NAME"]));
然后,只需在登录页面上查看QueryString即可,将其强制放置在该页面上,然后将用户放置在成功登录后的位置。
解决方案
问题可能与我们如何将用户重定向到其他页面有关。无论如何,引荐来源网址是绝对不应该让客户端容易伪造的绝对规则。
我们要查找的内容最好是使用查询字符串变量(例如returnURL或者originURL)来完成。 Refererer非常不可靠,因此最适合用于数据挖掘操作。
有关示例,请参见ASP.Net使用登录名进行重定向的方式。
UrlReferrer基于浏览器应发送的HTTP_REFERER标头。但是,就像所有留给客户的事情一样,它是可变的。
我知道一些"安全"套件(例如Norton的Internet Security)会删除该标头,因为它有助于跟踪用户行为。另外,我确定有一些Firefox扩展程序可以执行相同的操作。
最重要的是,我们不应该信任它。只需将url添加到GET字符串,然后根据该重定向即可。
更新:如评论中所述,将从GET参数进行的重定向限制为仅适用于无域相对链接,拒绝目录模式(../)等可能是个好主意。如果我们遵循"不要盲目使用任何用户提供的输入"标准,那么我们应该是安全的。