最好使用HTTP REFERER进行重定向还是使用其他方法?
目前,我们正在存储用户的HTTP_REFERER,以便将用户重定向回登录前浏览的上一页 Http Referer来自客户端,可以是伪造的或空白的。是否有更安全/可靠的方法来提供这种方便的用户重定向?以某种方式运行最好使用HTTP REFERER进行重定向还是使用其他方法?,http,redirect,Http,Redirect,目前,我们正在存储用户的HTTP_REFERER,以便将用户重定向回登录前浏览的上一页 Http Referer来自客户端,可以是伪造的或空白的。是否有更安全/可靠的方法来提供这种方便的用户重定向?以某种方式运行 history.go(-1); 是我所能想到的javascript以某种方式运行的唯一选择 history.go(-1); 是我能想到的javascript的唯一选择你有会话吗 如果是这样,您可以在服务器端跟踪他们在此会话中访问了哪些页面,并将它们发送回上一个页面 缓存可能会弄糟这
history.go(-1);
是我所能想到的javascript以某种方式运行的唯一选择
history.go(-1);
是我能想到的javascript的唯一选择你有会话吗
如果是这样,您可以在服务器端跟踪他们在此会话中访问了哪些页面,并将它们发送回上一个页面
缓存可能会弄糟这一点,但您可以适当地设置cache-control:header
但这一切似乎弊大于利。如果他们愚蠢到这样做,那么把他们送回一个被欺骗的页面有什么真正的问题吗
保罗。你们有会议吗
如果是这样,您可以在服务器端跟踪他们在此会话中访问了哪些页面,并将它们发送回上一个页面
缓存可能会弄糟这一点,但您可以适当地设置cache-control:header
但这一切似乎弊大于利。如果他们愚蠢到这样做,那么把他们送回一个被欺骗的页面有什么真正的问题吗
Paul.通常我会通过登录表单传递它
<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>
通常我通过登录表单传递它
<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>
据我所知没有。但是,你是否认为普通用户会假装他们的推荐人只是为了被重定向到错误的地方?这看起来不太可能 我担心有必要在不询问用户的情况下将用户重定向到他们的来源。我要么有一个首选项选项来决定是否允许重定向,以及在哪里进行重定向,要么在重定向之前要求他们能够拒绝重定向
如果RoBorg假设您将在不同的站点上提供登录屏幕,而不是您自己的站点,并且您希望存储源站点,那么您当然可以使用相同的表单发送他们登录的站点。我不知道。但是,你是否认为普通用户会假装他们的推荐人只是为了被重定向到错误的地方?这看起来不太可能 我担心有必要在不询问用户的情况下将用户重定向到他们的来源。我要么有一个首选项选项来决定是否允许重定向,以及在哪里进行重定向,要么在重定向之前要求他们能够拒绝重定向
如果RoBorg假设您将在不同的站点上提供登录屏幕,而不是您自己的站点,并且您希望存储源站点,那么您当然可以使用相同的表单发送他们登录的站点。尽管我猜您需要检查XSRF,但对于大多数用户来说,referer可能工作正常。我们要做的是,当有人点击他们必须登录的区域时,他们会被重定向到登录paeg,并带有他们在会话中存储的URL 一旦他们登录,他们就会被重定向到上一个URL
当然,这在很大程度上取决于身份验证的设置方式 对于大多数用户来说,referer可能工作得很好,不过我想您需要检查XSRF。我们要做的是,当有人点击他们必须登录的区域时,他们会被重定向到登录paeg,并带有他们在会话中存储的URL 一旦他们登录,他们就会被重定向到上一个URL
当然,这在很大程度上取决于身份验证的设置方式 实际上,我有一个函数,根据用户访问登录页面的路径,使用几种不同的重定向方法 用户登录后我调用的函数如下所示:
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
显然,这一切都可能在客户端被欺骗,但我真的不在乎他们是否想欺骗自己。我实际上有一个函数,根据用户访问登录页面的路径,使用几种不同的重定向方法 用户登录后我调用的函数如下所示:
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
显然,这一切都可能在客户端被欺骗,但我真的不在乎他们是否想欺骗自己。每当我使用它时,我的想法是,如果有人在欺骗他们的推荐人,那么我真的不在乎他们是否回到了他们来自的地方。我相信99%的时间它都是可用的和正确的。1%的用户是高级用户,他们无论如何都会找到回家的路。我记得那一天,突然间,一半的网络被破坏了。结果诺顿发现那个混蛋正在删除我的帖子中的推荐信。我非常生气…每当我使用它的时候,我的想法是,如果有人在欺骗他们的推荐人,那么我真的不在乎他们是否回到了他们来自的地方。我相信99%的时候它会
可用且正确。1%的用户是高级用户,他们无论如何都会找到回家的路。我记得那一天,突然间,一半的网络被破坏了。结果诺顿发现那个混蛋正在删除我的帖子中的推荐信。我非常生气…你怎么知道是哪一页?哦,你假设登录页面位于不同的站点上。我假设登录框位于站点的每个页面上,这样你就可以浏览未登录的站点,但可以从任何页面登录并返回到你所在的页面。嗯,似乎我们需要更多的上下文。我解释说他想把用户送回google.com。出于安全原因,我不同意在客户端存储信息。如果我将referer存储在服务器端会话变量中,我可以相信用户不能更改我刚才设置的值。如果有一个隐藏字段,则所有赌注都是无效的。当然,但是来自客户端的所有数据都应该在使用前进行验证,以避免反映xss漏洞。因此,最好验证插入到脚本中的任何客户端数据,并将其存储在数据服务器端,以便您知道它不能被操作。您如何知道它是哪个页面?哦,你假设登录页面位于不同的站点上。我假设登录框位于站点的每个页面上,这样你就可以浏览未登录的站点,但可以从任何页面登录并返回到你所在的页面。嗯,似乎我们需要更多的上下文。我解释说他想把用户送回google.com。出于安全原因,我不同意在客户端存储信息。如果我将referer存储在服务器端会话变量中,我可以相信用户不能更改我刚才设置的值。如果有一个隐藏字段,则所有赌注都是无效的。当然,但是来自客户端的所有数据都应该在使用前进行验证,以避免反映xss漏洞。因此,最好验证插入到脚本中的任何客户机数据,并将其存储在数据服务器端,以便您知道它不能被操纵。