2010-10-26 3 views
3

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

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

ответ

1

Вы можете ограничить доступ к определенным страницам с помощью элемента <location>. Так, например, для ограничения доступа к подпапке admin:

<system.web> 
    <!-- enable Forms authentication --> 
    <authentication mode="Forms"> 
     <forms 
      name="MyAuth" 
      loginUrl="login.aspx" 
      protection="All" 
      path="/" 
     /> 
    </authentication> 
</system.web> 

<!-- restrict access to the admin subfolder 
    and allow only authenticated users --> 
<location path="admin"> 
    <system.web> 
     <authorization> 
      <deny users="?" /> 
     </authorization> 
    </system.web> 
</location> 
5

Вы должны установить режим проверки подлинности в вашем web.config

<authentication mode="Forms"> 
     <forms name="Authen" protection="All" timeout="60" loginUrl="login.aspx"/> 
    </authentication> 
<authorization> 
    <deny users="?"/> 
</authorization> 
+0

+1 для избиения меня. Вы можете улучшить свой ответ, добавив ссылку на свойство loginUrl –

+0

, в котором говорится: в авторизации. – kalls

0

Вы должны добавить что-то подобное в файле web.config :

<authorization> 
    <allow users="user1, user2"/> 
    <deny users=”?”/> 
</authorization> 

Это должно решить проблему. См: http://support.microsoft.com/kb/815151

0

Помимо настройки проверки подлинности в web.config файл, вы можете также использовать метод в Global.asax session_start (...) для проверки пользователей новой сессии, а также убедитесь, что вы Пересмотреть куки сессии, если она равна нулю, вы должны перенаправить пользователя на страницу входа в систему:

public class Global:System.Web.HttpApplication 
{ 
    protected void Session_Start(object sender, EventArgs e) 
    { 
     if(Session.IsNewSession) 
     { 
      if (Request.Headers["Cookie"] != null) 
      { 
       if (Request.Headers["Cookie"].IndexOf("Web_App_Login_Cookie", StringComparison.OrdinalIgnoreCase) >= 0) 
       { 
        FormsAuthentication.SignOut(); 
        Context.User = null; 
        Response.Redirect("~/logOn.aspx"); 
       } 
      } 
     } 
    } 
} 

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

public class SessionBasePage : System.Web.UI.Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     if (HttpContext.Current != null && HttpContext.Current.Session != null)    
     { 
      UserSession = HttpContext.Current.GetUserSession(); 
      if (UserSession != null) 
      { 
       LoggedUserInfo = HttpContext.Current.GetLoggedUserInfo(); 
       HttpContext.Current.UpdateLoggedUserInfo(); 
      } 
      else { Response.Redirect("~/logOn.aspx", true); } 
     } 
    } 
} 
Смежные вопросы