Лучше всего использовать HTTP REFERER для перенаправлений или использовать какой-либо другой метод? - PullRequest
1 голос
/ 21 ноября 2008

В настоящее время мы храним HTTP_REFERER пользователя, чтобы мы могли перенаправить пользователя обратно на предыдущую страницу, которую он просматривал, прежде чем он вошел в систему.

Http Referer исходит от клиента и может быть поддельным или пустым. Есть ли более безопасный / надежный способ доставки этого удобного пользовательского перенаправления?

Ответы [ 6 ]

2 голосов
/ 21 ноября 2008

У вас есть сессии?

Если это так, вы можете отслеживать на стороне сервера, какие страницы они открыли в этом сеансе, и отправлять их обратно на предыдущий.

(Кеширование может испортить это, но вы можете установить заголовок cache-control: header соответственно)

Но все это кажется скорее болью, чем выгодой. Есть ли реальная проблема в отправке их на поддельную страницу, если они достаточно глупы, чтобы сделать это?

Paul.

2 голосов
/ 21 ноября 2008

как-то работает

history.go(-1);

единственная альтернатива, о которой я могу подумать (javascript)

0 голосов
/ 21 ноября 2008

У меня фактически есть функция, которая использует несколько различных методов для перенаправления в зависимости от того, какой путь пользователь выбрал, чтобы попасть на страницу входа.

Функция, которую я вызываю после входа пользователя, выглядит примерно так:

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

Очевидно, что все это может быть подделано на стороне клиента, но мне все равно, хотят ли они подделать себя.

0 голосов
/ 21 ноября 2008

Реферер, вероятно, будет работать нормально для большинства пользователей, хотя я думаю, вам нужно будет проверить XSRF. Что мы делаем, когда кто-то попадает в область, где он должен войти, он перенаправляется на страницу входа с URL-адресом, где он был сохранен в сессии.

После входа в систему они перенаправляются на предыдущий URL.

Конечно, это очень сильно зависит от того, как настроена ваша аутентификация!

0 голосов
/ 21 ноября 2008

Не то, что я знаю. Но тогда, вы полагаете, что обычные пользователи будут притворяться, что их Реферер просто перенаправлен в неправильное место? Это выглядит маловероятным.

Я беспокоюсь о необходимости перенаправить пользователей туда, откуда они пришли, даже не спросив их об этом. Я бы либо выбрал опцию предпочтений, чтобы разрешить или нет (и где), либо предварительно попросить их перенаправить, чтобы запретить перенаправление.

Если RoBorg предполагает, что вы будете предлагать экраны входа в систему на сайтах, отличных от ваших, и хотите сохранить исходный сайт, то, конечно, вы можете использовать ту же форму для отправки сайта, с которого они вошли.

0 голосов
/ 21 ноября 2008

Обычно я передаю его через форму авторизации.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...