目前,我们正在存储用户的HTTP_REFERER,以便我们可以将用户重定向回他们登录前浏览的上一页。
Http Referer来自客户端,可能是欺骗或空白。是否有更安全/可靠的方法来提供这种方便的用户重定向?
答案 0 :(得分:2)
以某种方式运行
history.go(-1);
是我能想到的唯一选择(javascript)
答案 1 :(得分:2)
你有会议吗?
如果是这样,您可以在服务器端跟踪他们在此会话中访问过的页面,并将其发送回上一个页面。
(缓存可能会搞砸,但你可以适当地设置缓存控制:标头)
但这一切似乎都比痛苦更痛苦。将它们发回欺骗页面是否有任何实际问题,如果它们足够愚蠢呢?
保罗。
答案 2 :(得分:0)
通常我会通过登录表单传递它。
<form action="login" method="post">
<input type="hidden" name="url" value="... whatever the current url is ...">
<input type="text" name="username">
<input type="text" name="password">
</form>
答案 3 :(得分:0)
不是我知道的。但是,你是否认为普通用户会伪装他们的Referer只是为了重定向到错误的地方?这似乎不太可能。
我担心需要将用户重定向到他们来自的地方,甚至不询问他们。我要么有一个首选项选项来决定是否允许(以及在哪里),或者先询问它们重定向,否则可以拒绝重定向。
如果RoBorg假设您将在不同的网站上提供登录屏幕而您想存储源网站,那么您当然可以使用相同的表单发送他们登录的网站。
答案 4 :(得分:0)
对于大多数用户来说,引用者可能会正常工作,但我猜您需要检查XSRF。我们所做的是,当某人遇到他们必须登录的区域时,他们会被重定向到登录paeg,其中包含他们在会话中存储的位置。
一旦他们登录,他们就会被重定向到之前的网址。
当然,这在很大程度上取决于您的身份验证设置方式!
答案 5 :(得分:0)
我实际上有一个函数,它使用几种不同的方法进行重定向,具体取决于用户到达登录页面所用的路径。
我在用户登录后调用的函数类似于:
Protected Sub doRedirect(ByVal sender As Object, ByVal e As System.EventArgs)
If Not Request.QueryString("rtn") Is Nothing Then
Response.Redirect(Request.QueryString("rtn").ToString)
ElseIf Me.hidden_return.Value <> "" Then
Response.Redirect(Me.hidden_return.Value)
ElseIf Not Request.UrlReferrer Is Nothing AndAlso Request.UrlReferrer.Segments(Request.UrlReferrer.Segments.Length - 1) <> "login.aspx" Then
Response.Redirect(Request.UrlReferrer.ToString)
Else
Response.Redirect("default.aspx")
End If
End Sub
显然这可能都是客户端的欺骗,但我真的不在乎他们是否想欺骗自己。