Как защитить веб-страницу - PullRequest
       6

Как защитить веб-страницу

1 голос
/ 08 августа 2010

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

Например, веб-страницы

Login.aspx
Account.aspx

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

Страница учетной записи напрямую не должна открываться без страницы входа.

Как защитить веб-страницы.

Нужны примеры.

Ответы [ 8 ]

1 голос
/ 19 августа 2010

Это будет работать. Сохраните его в Context.Items и перенесите запрос на другую страницу.

//In Login.aspx
Context.Items["userName"] = myValue;
Server.Transfer("Account.aspx");

//In Account.aspx
protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostback)
   {
      if (UserName == null)
      {
         UserName == Context.Items["userName"];
      }
      if (UserName == null)
      {
         Server.Transfer("Login.aspx");
      }
   }
}

    private String UserName
    {
        get
        {
            if (ViewState["UserName"] != null)
            {
                return ViewState["UserName"].ToString();
            }
            else
            {
                return null;
            }
        }
        set
        {
            ViewState["UserName"] = value;
        }
    }

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

1 голос
/ 08 августа 2010

Сессия распределяется между вкладками и окнами. Он не используется в разных браузерах (например, IE и Firefox).

Мне непонятно, зачем вам нужно разделять переменные по вкладкам.

Полагаю, если вы хотите, вы можете ПОСТАВИТЬ некоторое значение с одной страницы на другую. В Page_Load, если не isPostback, сохраните это значение во ViewState. Если значение не получено, перенаправьте на страницу входа.

Но было бы лучше переосмыслить, почему вы хотите это сделать. Там может быть лучший способ для достижения вашей цели.

1 голос
/ 08 августа 2010

Если я правильно вас понимаю, я считаю, что это веб-браузер по умолчанию. То же самое в случае с gmail, hotmail или любым другим веб-приложением, которое предоставляет сеансы входа / выхода из системы. Войдите в gmail, откройте страницу контактов, скопируйте и вставьте URL-адрес страницы контакта в другую вкладку браузера, и вы увидите ту же страницу контактов без запроса страницы входа.

Эта статья может помочь вам понять; и предоставить способ обойти.

Правильная поддержка слияния сессий важна, потому что большинство веб-приложений написаны так, чтобы ожидать этого. Например, когда веб-приложение открывает всплывающее окно, оно обычно делает это в расчете на то, что всплывающее окно поделится файлами cookie с главным окном, так что пользователь останется в системе, а его настройки останутся доступными и т. Д. Когда пользователь использует команду «Дублировать вкладку», он разумно ожидает, что на новой вкладке будет отображаться то же содержимое, что и на исходной вкладке - общий доступ к файлам cookie имеет решающее значение для правильной работы этого сценария.

1 голос
/ 08 августа 2010

Чтобы сделать то, что вы хотите, вам нужно понять, как работают вкладки в браузерах.обычно они разделяют файлы cookie и состояния сеанса, и поэтому, когда у вас есть сеанс на веб-сайте, если вы нажимаете на ссылку или открываете новое окно, сеанс продолжается там (и именно поэтому у вас есть некоторые проблемы с безопасностью).

Чтобы решить вашу проблему, вам нужно продолжить сеанс другим способом ... И это не будет легким ...

Итак, если вам действительно нужно это сделать, тогдаВы должны иметь что-то уникальное на своей странице, которая не является общей.У вас может быть скрытое поле, которое передается на каждую выбранную ссылку.Но это подразумевает большую работу по управлению вашими страницами.И это принесет другие проблемы с безопасностью (например, если кто-то отправит ссылку, чем сеанс также идет: - (

Один странный способ сделать это - иметь фреймы. На базовой странице (та, которая содержит фреймы)) вы бы сохранили сессию в некотором javascript. Затем все страницы проверяют, есть ли верхняя страница, и есть ли у нее действительный сеанс. Когда вы открываете новую вкладку и копируете ссылку, страница фрейма будет чистой, так что выпотребуется новый логин. Я не знаю, есть ли у него какие-либо другие проблемы с безопасностью, связанные с этим

1 голос
/ 08 августа 2010

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

0 голосов
/ 08 августа 2010

Перенаправление, если реферер пуст или не входит в систему.

if (Request.UrlReferrer == null || !Request.UrlReferrer.LocalPath.Equals("/website1/account/login.aspx",StringComparison.OrdinalIgnoreCase))
{
    Response.Redirect("/website1/account/login.aspx");
}
0 голосов
/ 08 августа 2010

Это не очень хороший подход к оформлению вашей страницы.Http не имеет состояния, что означает, что типичный способ сохранить сеанс пользователя, который вошел в систему, - это использование файла cookie с некоторой случайной строкой сеанса.Эта строка отправляется при каждом запросе, и сервер будет проверять, связана ли строка с сеансом.

Теперь - здесь есть один момент, который заключается в том, что эта строка сеанса управляется браузером пользователей, который работает исключительно на клиентебоковая сторона.Вы можете заставить браузер «забыть» о строке в разных вкладках, но это сложно и причудливо.

Если это какая-то проблема безопасности, не делайте этого!:) Никогда не доверяйте логике на стороне клиента, чтобы сделать ваш сайт более безопасным.

[ПРАВИТЬ] Я предполагаю, что вы имеете в виду, что пользователь вошел в первую вкладку, а потом не вышел?

0 голосов
/ 08 августа 2010

Как насчет перенаправления на Login.aspx, если к Account.aspx обращаются, когда пользователь не вошел в систему?

Так работает большинство сайтов.

Вы можете проверить состояние сеанса в Account.aspx и затем перенаправить на Login.aspx соответственно.

...