2009-03-13 2 views
2

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

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

Thank you.

Лалита Кумар Barik

ответ

0

Вы должны проверить пользователя войти в состояние на каждом 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."); 
    } 

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

+0

При выполнении строки if (SESSION ['logged_in']! = null && SESSION ['logged_in'] == true) Я получаю следующую ошибку: Оператор '==' не может быть применен к операндам типа 'object' и 'bool' Любые решения? Lalit Kumar Barik – LalitBarik

+0

Возможно, необходимо сделать бросок. Измените код на это: if ((bool) SESSION ['logged_in']! = Null && (bool) SESSION ['logged_in'] == true) и расскажите мне, как это происходит. Я буду проверять это завтра официально. Благодарю. –

+0

if (SESSION ['logged_in']! = Null && (bool) SESSION ['logged_in'] == true) - Не утруждайтесь приведением нулевой проверки. –

8

Вы хотите взглянуть на location secton веб-конфигурации.

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

Таким образом, вы бы добавить что-то вроде:

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

«отрицают пользователей =» «» бит говорит «запретить все анонимные пользователи».

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

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

authorization Element

+0

Zhaph, пользовательские имена пользователей этого решения? Можете ли вы указать свой собственный список пользователей через комбинацию имени пользователя/пароля? –

+0

Если честно, это решение предполагает, что вы используете систему членства ASP.NET - либо через встроенный поставщик SQL, либо у вашего собственного провайдера: http://bit.ly/w5yX. Однако да, вы можете указать комбинации имени пользователя и пароля в элементе credentials/users в web.config: http://bit.ly/11sRQ3 –

+0

Это также позволит вам использовать такие вещи, как if (Request.IsAuthenticated), чтобы проверить, пользователь вошел в систему, а не полагался на переменные сеанса и т. д.: http://bit.ly/yJY9M –

2

Это еда для членства в ASP.Net. Взгляните на this article, а также the great series на 4GuysFromRolla.

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

0

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

Отключить функцию, называемую CheckIsInRoles ('Admin', 'Normal', 'WhateverRoleYouChoose'), которая возвращает логическое значение. Если true, загрузите страницу; если нет, то нет.

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

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

+0

Спасибо за ваше объяснение по теме ролей. Я уверен, что буду использовать эти знания на своих будущих веб-сайтах. К сожалению, на текущем веб-сайте нормальным пользователям не нужно входить в систему. Для доступа к нескольким ограниченным страницам требуется только несколько человек. Мне нужно было простое ограничение. – LalitBarik

Смежные вопросы