'ASP.NET'에 해당되는 글 5건

  1. 2008/12/09 WebService의 WSDL및 안내페이지 없애기
  2. 2008/10/30 BeginRequest,PreSendRequestHeaders를 사용하여 쿠키암호화
  3. 2008/10/22 한방에 예외로그를 처리하기.
  4. 2007/12/30 VS2008 고마운 신기능
  5. 2007/03/19 ASP.Net와 Java Struts 비교
2008/12/09 17:41

WebService의 WSDL및 안내페이지 없애기

웹서비스를 만들고 해당 asmx를 브라우저에서 열면 아래와 같은 안내?용 페이지가 나오는데 보안상 없애고 싶을때는...




web.config에 아래의 빨간 부분을 추가하면 됩니다.
 <system.web>
   <webServices>
   <protocols>
    <remove name="Documentation" />
   </protocols>
  </webServices>
 </system.web>

Trackback 0 Comment 0
2008/10/30 23:14

BeginRequest,PreSendRequestHeaders를 사용하여 쿠키암호화

Global.asax의 Application_BeginRequest는 클라이언트의 리퀘스트가 발생하고 서버상의 처리가 시작되기 직전에 일어납니다.
즉 해당되는 페이지의 처리를 시작하기 전에 발생하는 이벤트이죠.
반대로 Application_PreSendRequestHeaders는 해당페이지의 서버처리가 끝나고 클라이언트에게 전송하기 직전에 발생합니다.

이걸 이용해서 웹어플리케이션에서 사용하는 모든 쿠키를 한방에 암호화, 복호화 하는 것이 가능합니다.
개발자는 암호화,복호화에 대하여 특별히 인식하지 않아도 안전하게 쿠키를 보존하는 방법을 제공할수 있죠.

Global.asax에 아래의 두 메서드를 추가합니다.

    protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
    {
        string[] keys = Response.Cookies.AllKeys;
       
        for (int i = 0; i < keys.Length; i++) //클라리언트로 전송해야할 쿠키를 루프
        {
            //ASP.NET_SessionId는 제외함. 이걸 바꿔버리면 새로운 세션으로 인식해버리기때문에..
            if (Response.Cookies[keys[i]].Name != "ASP.NET_SessionId") 
            {

                //이 샘플은 Cookie의 값이 하나일 경우만 복호화 처리를 하도록 했습니다.
                //약간 수정을 하면 계층구조의 쿠키값도 암호화처리를 할수 있습니다.
                if (Response.Cookies[keys[i]].Values.AllKeys.Length <= 1)
                {
                    //이 샘플에서는 방법을 제시할 뿐이므로 실제 암호화 처리를 생략하고
                    //::xx를 뒤에 추가하는걸로 암호화했다고 정의합니다.

                   
                    //여기에서 쿠키를 암호화 합니다.
                    HttpCookie cookie = Response.Cookies[keys[i]];
                    Response.Cookies.Remove(cookie.Name); //컬렉션키 재정의를 위해 기존쿠키를 컬렉션에서 삭제
                    cookie.Name = cookie.Name + "::xx";
                    cookie.Value = cookie.Value + "::xx";

                    Response.Cookies.Set(cookie); //쿠키를 재등록
                }
            }
        }
    }

 

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        string[] keys = Request.Cookies.AllKeys;
       
        for (int i = 0; i < keys.Length; i++) //클라리언트부터 전송되어오는 쿠키를 루프
        {
            //ASP.NET_SessionId는 제외함. 이걸 바꿔버리면 새로운 세션으로 인식해버리기때문에..
            if (keys[i] != "ASP.NET_SessionId") 
            {

                //이 샘플은 Cookie의 값이 하나일 경우만 복호화 처리를 하도록 했습니다.
                //약간 수정을 하면 계층구조의 쿠키값도 복호화처리를 할수 있습니다.
                if (Request.Cookies[keys[i]].Values.AllKeys.Length <= 1)
                {
                    //이 샘플에서는 방법을 제시할 뿐이므로 실제 복호화 처리를 생략하고
                    //::xx를 지우는걸로 복호화했다고 정의합니다.

                    //여기에서 쿠키를 복호화 합니다.
                    HttpCookie cookie = Request.Cookies[keys[i]];
                    Request.Cookies.Remove(cookie.Name); //컬렉션키 재정의를 위해 기존쿠키를 컬렉션에서 삭제
                   
                    cookie.Name = cookie.Name.Replace("::xx", "");
                    cookie.Value = cookie.Value.Replace("::xx", "");
                   
                    Request.Cookies.Set(cookie); //쿠키를 재등록
                   
                }
            }
        }
    }




추가를 한후에 쿠키를 확인하기 위해 페이지를 하나 만들었습니다.
상단에는 현재 쿠키의 이름과 쿠키값을 리스트로 표시해주는 라벨이 있고 아래에는 쿠키값을 추가할수 있는 텍스트박스와 버튼을 배치했습니다.


TestCookie라는 이름의 Cookvalue값을 추가하고 페이지를 리로드 합니다.


그리고 다음 리퀘스트의 HTTP_COOKIE를 확인해보면 쿠키이름과 값이 암호화되서 클라이언트에 저장된것을 볼수 있습니다.



하지만 페이지상에서는 TestCookie인것을 알수가 있습니다.
실제로도 모든 작업을 Request.Cookie["TestCookie"]로 얻어 낼수가 있습니다.



이러한 조그마한 처리만으로도 커다란 세큐티리홀을 막아낼수 있습니다.
더군다나 요즘처럼 개인정보 유출등에 신경쓰이는때에 하나의 좋은 해결책이 될거 같습니다.
Trackback 0 Comment 0
2008/10/22 09:41

한방에 예외로그를 처리하기.

어플리케이션에서 발생하는 모든 예외를 한곳에서 로그처리를 하면 굉장히 편리한 경우가 많습니다.
개발자가 많아지거나 규모가 커지면 커질수록 예외처리를 하기가 쉽지않은데요..
아래의 코드를 이용해서 처리가 안된 예외를 자동으로 캐치해서 로그를 남겨줄수있습니다.
이렇게하면 알수없는 에러가 발생했을경우 로그가 남기때문에 수정하기가 쉬워지죠...

try
{
    //여기서 예외가 발생안하면 웹어플리케이션
    //ここで例外が発生しなかったらウェブアプリケーション
    System.Web.HttpContext.Current.ApplicationInstance.Error += new EventHandler(ApplicationInstance_Error);
}
catch (Exception)
{
    //윈도우 어플리케이션의 UnhandledException이벤트에 핸들러를 추가
    //例外が発生したらウィンドウアプリケーション
    System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}

static void ApplicationInstance_Error(object sender, EventArgs e)
{
    //로그를 남기는 처리를 집어넣기
    //WriteLog("Exception発生!!!",System.Web.HttpContext.Current.Error.ToString(), LogLevel.Fatal);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    //로그를 남기는 처리를 집어넣기
    //WriteLog("Exception発生!!!", e.ExceptionObject.ToString(), LogLevel.Fatal);
}


위의 코드로 처리되지않은 에러들이 각각 ApplicationInstance_Error와 CurrentDomain_UnhandledException 이벤트핸들러로 넘어오게됩니다.
그럼 필요한 코드를 집어넣어서 파일 또는 이벤트로그에 로그를 남기시면 에러가 발생했을경우 유저를 붙잡고 어떤 에러가 낳는지 캐물을 필요도 없게됩니다...ㅎ

저는 위의 코드를 별도로 개발한 범용로그컴퍼넌트에 붙여넣어서 Logger가 로딩되면 자동으로 어플리케이션에 붙히도록 해두었습니다.


Trackback 0 Comment 0
2007/12/30 15:18

VS2008 고마운 신기능

VS2008에는 LINQ라든지 WPF라든지 최신 기술도 도입되지만 우리들의 작업을 그림자속에서 지원해주는 기능도 몇가지 추가가 됩니다.

그중에 맘에 드는 기능 몇개를 골라봅니다.



IntelliSense의 반투명 표시 기능.
사용자 삽입 이미지



















보통 이런식으로 후보코드가 표시되는되요..
그럼 아래줄의 코드가 가려져서 인텔리센스를 닫고 코드를 확인하고 다시 열어봐야 하는 경우가 많았습니다.
2008에서는 위의 상태에서 Ctrl키를 누르면
사용자 삽입 이미지




















보이시나요? 인텔리센스의 팝업?이 투명해져서 뒷부분이 보이는것을..
작지만 편리한 기능입니다.


자바스크립트 디버깅기능
웹 어플리케이션을 개발할때면 언제나 격는 고통이지만...
자바스크립트 디버깅이 안되는 것이 상당히 불편했죠..alert함수를 사용해서 변수를 확인한다든지...
그런 불편함을 한방에 해결해주는 기능이 도입되었습니다.
사용자 삽입 이미지




























브레이크포인트도 걸수 있고 코드비하인드부분을 디버깅하는것과 동일한 기능을 제공합니다.


Trackback 0 Comment 0
2007/03/19 15:55

ASP.Net와 Java Struts 비교

ASP.Net와 JavaStruts의 다른점입니다.
기사자체는 조금 오래된(1.1기준) 내용입니다만...
1.1과 2.0은 아키텍쳐 자체는 변화가 없기때문에 지금도 해당되는 내용입니다.
읽어보니 Struts와 ASP.Net의 MVC패턴 비교가 상당히 알기 쉽게된거 같아서 올려봅니다.

영문
http://msdn2.microsoft.com/en-us/library/aa478961.aspx


일문

http://www.microsoft.com/japan/msdn/net/aspnet/ASPNet-ASPNet-J2EE-Struts.aspx

Trackback 0 Comment 0