在aspx C#.NET页面(我正在运行Framework v3.5)中,我需要知道用户来自何处,因为他们无法登录而无法查看页面。如果我有
A
页面
(用户要查看的页面)重定向到页面
B
(登录页面),Request.UrlReferrer对象为null.
背景:如果用户未登录,我将重定向到"登录"页面(
B
在这种情况下).登录后,我想将他们返回到他们被迫登录之前所请求的页面。
UPDATE:
一个不错的快速解决方案似乎是:
//if user not logged in
Response.Redirect("..MyLoginPage.aspx?returnUrl=" + Request.ServerVariables["SCRIPT_NAME"]);
然后,只需在登录页面上查看QueryString即可,迫使他们进入,并在成功登录后将用户放置在他们所在的位置。
- 2021-1-111 #
- 2021-1-112 #
UrlReferrer基于浏览器应该发送的HTTP_REFERER标头.但是,就像所有留给客户的事情一样,它是可变的。
我知道某些"安全"套件(如Norton的Internet Security)会删除该标头,因为它有助于跟踪用户行为.另外,我确定有一些Firefox扩展程序可以执行相同的操作。
最重要的是,您不应该信任它.只需将URL附加到GET字符串,然后基于该字符串进行重定向。
更新:如评论中所述,将从GET参数的重定向限制为仅适用于无域相对链接,拒绝目录模式(../)等可能是一个好主意。因此,仍然进行完整性检查 重定向; 如果您遵循"不要盲目使用任何用户提供的输入"标准,那么您应该是安全的。
- 2021-1-113 #
问题可能与如何将用户重定向到其他页面有关.无论如何,引荐来源网址不是您应遵循的绝对规则-客户端可以轻松地对其进行伪造。
- 2021-1-114 #
您要查找的内容最好是使用查询字符串变量(例如returnURL或originURL)来完成. Referrer非常不可靠,因此最适合用于数据挖掘操作。
例如,请参见ASP.Net通过登录进行重定向的方式。
相关问题
- c#:获取windows 8自动颜色主题的活动颜色c#netwpfwinapiwindows82021-01-12 01:28
- c#:遍历函数结果时,foreach如何工作?c#netforeach2021-01-11 17:26
- c#:PictureBox问题c#netwinformspicturebox2021-01-11 04:56
- c#:并行执行任务c#netasynchronousasyncawaittaskparallellibrary2021-01-11 04:56
- c#:静态和实例方法同名?c#netoop2021-01-11 05:55
如果使用标准成员资格提供程序,并为 目录/页面,代码将自动设置ReturnUrl的查询参数,并在成功登录后重定向。
如果您不想使用Membership provider模式,建议您也手动执行查询字符串参数. HTTP引荐来源网址不是很可靠。