2012-05-16 3 views
1

내 ASP.NET App 내에서 메서드를 사용하여 사용자가 페이지를 볼 수 있는지 또는 "잘못된 권한"페이지로 리디렉션 할 수 있는지를 결정합니다.ASP.NET에서 Response.Redirect 클래스를 사용하는 것은 바람직하지 않습니까?

마스터 페이지에이 권한 리디렉션을 추가하면 무한 루프가 발생하므로 모든 페이지에 적용해야합니다. 이 메소드를 모든 페이지에 복사하고 싶지는 않습니다. 따라서이 메소드를 보유하고있는 웹 애플리케이션 내에 클래스를 작성하여 앱 전체에서 전역으로 사용할 수 있습니다.

정규 교육을받지 못했지만 Response.Redirect 또는 모든 "웹"기능을 클래스에 배치하는 것은 나쁜 습관이라고 말하고 있습니다. 나 맞아? 그렇다면이 문제를 해결할 더 좋은 방법이 있습니까?

+0

클래스 이외의 다른 코드는 어디에 넣으시겠습니까? –

+0

페이지에 대한 액세스에 각 역할/권한이 필요한 페이지에 대한 '규칙'이 외부 (예 : SiteMap, Xml 파일 등) 인 경우이 수준의 액세스 제어에 HttpModule을 사용할 수 있습니다. http://stackoverflow.com/questions/4401088/how-would-an-httpmodule-for-custom-authentication-interact-with-windows-authenti – StuartLC

답변

3

리디렉션하기 전에 현재 URL이 유효하지 않은 페이지인지 확인할 수 있습니다. 따라서 이미없는 경우에만 리디렉션됩니다.

if(!Request.RawUrl.Contains("Invalid Permissions Page")) 
    Response.Redirect("Invalid Permissions Page"); 
1

당신은 System.Web.UI.Page에서의이 myPageClass을 부르 자, 그 유산을 새로운 클래스를 만들 수 있습니다, 다음, 당신이 myPageClass에서 유전 뒤에 모든 코드를 만들어이 클래스에서 필요한 모든 코드를 포함한다. 내 의견이 다른 페이지로 이동거야, 당신은, 예를 들어, 버튼의 액션의 경우 Response.Redirect를 사용하지 말아야에서


public partial class _Default : myPageClass 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Your code here 
    } 
} 

public class myPageClass : System.Web.UI.Page 
    { 
     public void authorize() 
     { 
      // your auth code here 
      Response.Redirect("Invalid_Permissions_Page.aspx", false); 
     } 
    } 
, 당신은 필요가 없습니다 그렇게하기 위해 서버에 가려면 클라이언트에서만 만들어야합니다.

1

것부터 먼저, 원래의 질문 :

나쁜 관행은 ASP.NET의 클래스 내에서 Response.Redirect를가합니다?

예 나는 이것이 나쁜 습관이라고 생각합니다. 델리게이트를 전달하는 것이 더 안전합니다. 그러면 'AuthorizeRequest'메소드가 델리게이트를 호출 할 수 있습니다.

public static void AuthorizeRequest(Action<string> redirect) 
{ 
    if(/*whatever*/) 
     redirect("/InvalidPermissions.htm"); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    AuthorizeRequest(Response.Redirect); 
} 

지금 더 큰 문제는 ... 당신은이 작업을 수행하지 않으려는 예를 들면 다음과 같습니다!

각 페이지에 권한 부여를 지정하면 보안 문제를 빠르게 작성할 수 있습니다. 누군가는 어설 션을 잊거나 실수로 제거합니다. ASP.NET에는 이러한 목적으로 요청을 가로 채고 필터링하는 다양한 방법이 있습니다.

가장 쉬운 방법은 Global.asax 파일의 이벤트 후크에 배치하는 것입니다. HttpApplication 개체에는이 용도로 사용할 수있는 몇 가지 이벤트가 있습니다. 또 다른 옵션은 IHttpModule 인터페이스를 구현하는 것입니다. 어쨌든, 나는 각 페이지에 코드를 작성하지 않을 것이다.

+0

답장을 보내 주셔서 감사합니다. 마치 Global 내에서 Application_AuthenticateRequest 메서드를 통해이 작업을 수행해야하는 것처럼 보입니다.asax, 내가 어디에 내 메서드를 넣고 HttpApplication.Response.Redirect를 호출 할 것인가? – Lando

관련 문제