Request.UrlReferrer null?

本文关键字:null UrlReferrer Request | 更新日期: 2023-09-27 17:47:21

在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,并在成功登录后将用户放在原位。

Request.UrlReferrer null?

UrlReferrer基于浏览器应该发送的HTTP_REFERER标头。但是,就像留给客户的所有事情一样,它是可变的。

我知道一些"安全"套件(如诺顿的互联网安全软件)会去掉这个标题,相信它有助于跟踪用户行为。另外,我确信有一些Firefox扩展可以做同样的事情。

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

更新:如评论中所述,将来自GET参数的重定向限制为仅适用于无域相对链接,拒绝目录模式(../),等。所以仍然理智检查重定向;如果您遵循标准的"不要盲目使用任何用户提供的输入"规则,您应该是安全的。

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

如果您不想使用成员资格提供程序模式,我建议您也手动执行查询字符串参数操作。HTTP 引用不是很可靠。

问题可能与您如何将用户重定向到其他页面有关。无论如何,引用 URL 不是您应该作为绝对规则的 - 客户端可以轻松伪造它。

您正在寻找的内容最好使用查询字符串变量(例如 returnURL 或 originURL)来完成。反向链接最适合用于数据挖掘操作,因为它非常不可靠。

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