Запретить посетителям открывать определенные страницы - PullRequest
2 голосов
/ 13 марта 2009

У меня есть веб-сайт ASP.Net 2.0 с SQL Server в качестве базы данных и C # 2005 в качестве языка программирования. Сайт почти готов и все ссылки работают нормально. Но я хочу, чтобы обычные пользователи не открывали пару страниц. Когда любой пользователь нажимает на эти конкретные ссылки, открывается другая страница, которая содержит элемент управления ASP Login. Пользователь должен предоставить действительный идентификатор пользователя и пароль для отображения ссылок, указывающих на ограничительные страницы. Но, будучи новичком, я не знаю, как использовать всю мощь контроля входа ASP. Потому что, если пользователь узнает точный URL-адрес ограниченных страниц, он может обойти контроль входа в систему и получить прямой доступ к этим страницам, введя URL-адрес в адресную строку. Я хочу предотвратить это. Если пользователь вводит URL-адрес непосредственно в адресной строке, я хочу, чтобы сама страница проверяла, прошла ли проверка пользователя с помощью элемента управления «Логин», и либо отображала страницу, либо указывала пользователю на страницу входа.

Как мне реализовать эту функцию ??

Спасибо.

Лалит Кумар Барик

Ответы [ 5 ]

8 голосов
/ 13 марта 2009

Вы захотите взглянуть на расположение раздела веб-конфигурации.

В этом разделе вы можете определить вплоть до уровня страницы права доступа, поэтому не имеет значения, если бы пользователи знали URL защищенных страниц, ASP.NET не допустит их.

Итак, вы бы добавили что-то вроде:

<location path="SecuredPage.aspx">
  <system.web>
     <authorization>
        <deny users="?"/>
     </authorization>
  </system.web>
</location>

Бит "deny users ="? "" Говорит: "Запретить всех анонимных пользователей".

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

Более подробную информацию о разделе авторизации можно найти здесь:

Элемент авторизации

2 голосов
/ 13 марта 2009

Это еда для членских служб ASP.Net. Взгляните на эту статью , а также замечательную серию на 4GuysFromRolla.

Членство позволяет вам хранить информацию о пользователе / ​​пароле, которая используется, среди прочего, элементом управления Login. В сочетании с конфигурацией авторизации вы сможете напрямую сузить доступ к определенным страницам до конкретных пользователей или ролей.

1 голос
/ 13 марта 2009

Вам понадобится способ управлять сеансами входа в систему для каждого пользователя. Ниже приведены некоторые учебники, которые могут вам помочь:

http://www.codeproject.com/KB/session/NoCookieSessionLogin.aspx

http://www.dotnetspider.com/resources/5597-Handling-Session-for-Login-Logout.aspx

0 голосов
/ 16 марта 2009

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

Запустить функцию CheckIsInRoles («Admin», «Normal», «Wh whatRoleYouChoose»), которая возвращает логическое значение. Если это правда, загрузите страницу; если нет, не надо.

Еще лучше не отображать ссылку, если не в правильной роли.

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

0 голосов
/ 13 марта 2009

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

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

Самый простой способ - управлять входами в систему через объект сеанса. Когда пользователь входит в систему с правильными учетными данными, вы можете установить Session["logged_in"] = true. И на каждом Page_Load() событии страниц, которые вы хотите защитить, вам необходимо выполнить следующую проверку.

Добавьте этот код в начале вашей функции Page_Load ():

  if (Session["logged_in"] != null && (bool)Session["logged_in"] == true){
    Response.Write("I'm logged in!");
  }else{
    Response.Write("I'm not logged in.");
  }

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

...