logo
border border
              
border border
border border
  Post Subject :: #96. ASP.NET 4 New Feature - Html Encoded Code Expression     [ASP.NET]
border border
border border
     
이전의 ASP.NET 3.5까지에서는, 간단하게 <%= expression %>(일반적으로, 코드 너겟이라 불리는)를 사용하여 응답에 대한 텍스트를 화면에 출력하였습니다. 이러한 코드 너겟을 사용하는 경우, 개발자들은 쉽게 HTML에 대한 인코딩을 잊어버리기 쉽상입니다. 이러한 경우, 이러한 방법으로 코드 너겟을 작성한 페이지는 쉽게 XSS(크로스 사이트 스크립팅, Cross Site Scripting) 공격에 노출되게 됩니다.

쉽게 예를 들어보도록 하겠습니다. 웹 폼에서 코드 비하인드에 작성되어 있는 메서드인 GetContent()라는 메서드를 코드 너겟을 사용하여 호출하고 있으며, GetContent() 메서드는 다음과 같이 구성되어 있다고 생각해 보겠습니다.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  Result by Calling CodeBehind Method : <%=GetContent()%>
</asp:Content>
public string GetContent() 
{
  string content = "<script language='javascript'>alert('Script Alert');</script>";
  content += "<p>Microsoft ASP.NET is a free technology that allows programmers to create dynamic web applications.</p>";
 
  return content;
}

위의 코드가 작성된 페이지를 띄워보면 HTML 인코딩을 하지 않았기 때문에, GetContent() 메서드에 정의된 스크립트가 실행됩니다. 따라서, <그림 1>와 같은 결과가 발생됩니다.

<그림 1> 스크립트가 실행되는 화면

따라서, 이와 같이 스크립트가 실행되는 것을 방지하기 위해서는 HTML 인코딩이 필요하며, HTML 인코딩을 하기 위해서는 HttpUtility 클래스에 있는 HtmlEncode() 메서드를 이용하면 됩니다.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  Result by Calling CodeBehind Method : <%=HttpUtility.HtmlEncode(GetContent())%>
</asp:Content>

ASP.NET 4에서는 이러한 실수를 피하기 위해 새로운 코드 표현식인 <%: expression %>이 추가되었습니다. <%: expression %> 표현식을 사용하게 되면, 위에서 설명하였던 HttpUtility.HtmlEncode() 메서드를 호출하였던 결과와 동일합니다.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  Result by Calling CodeBehind Method : <%: GetContent()%>
</asp:Content>

하지만, 새로운 코드 표현식을 사용하게 된다면 HTML 인코딩이 기본적으로 적용되므로, 이렇게 HTML 인코딩을 하지 않으려는 경우에는 마찬가지로 새롭게 ASP.NET 4에 추가된 HtmlString 클래스를 사용하면 됩니다.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  Result by Calling CodeBehind Method : <%: new HtmlString(GetContent())%>
</asp:Content>

하지만, 이 새로운 코드 표현식만으로 XSS 공격을 막을 수 있다고는 생각하지 않는 것이 좋으며, 개발자 스스로 이러한 공격에 대처할 수 있도록 코드를 작성해야 할 것입니다.


Creative Commons License
저작물크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
border border
border border
  이전 포스트 :: #95. ASP.NET 4 New Feature - ClientIDMode
  다음 포스트 :: #97. ASP.NET 4 New Feature - CheckBoxList and RadioButtonList Control Enhancements
border border
border border
  
  NAME ::   PASSWORD ::
  MAIL ::   HOMEPAGE ::
  COMMENT ::
border border
border border
COPYLEFT NX Blogs.   opml

LogIn ]  [ Join NX Blog's ]
border border
border border
mvp
border border
border border
  border
   Personal Thought
   ASP.NET
   ASP.NET AJAX
   ASP.NET MVC Framework
   Dev Story(Etc.)
   Reading the Articles
   About Microsoft / MSDN
   Certification Talk
   Useful Dev Tools
border border
border border
  border
   2010 년 09 월 (2)
   2010 년 06 월 (1)
   2010 년 05 월 (1)
   2010 년 04 월 (1)
   2010 년 03 월 (1)
   2010 년 02 월 (5)
   2010 년 01 월 (1)
   2009 년 04 월 (2)
   2009 년 03 월 (3)
   2009 년 02 월 (6)
   2009 년 01 월 (1)
   2008 년 10 월 (1)
   2008 년 06 월 (8)
   2008 년 05 월 (10)
   2008 년 04 월 (13)
   2008 년 03 월 (9)
   2008 년 02 월 (17)
   2008 년 01 월 (5)
   2007 년 12 월 (8)
   2007 년 11 월 (15)
   2007 년 10 월 (36)
   2007 년 09 월 (33)
   2007 년 08 월 (17)
   2007 년 07 월 (23)
   2007 년 06 월 (4)
   2007 년 05 월 (16)
   2007 년 04 월 (26)
   2007 년 03 월 (14)
   2007 년 02 월 (25)
   2007 년 01 월 (41)
   2006 년 12 월 (38)
   2006 년 11 월 (0)
   2006 년 10 월 (0)
   2006 년 09 월 (1)
   2006 년 08 월 (9)
   2006 년 07 월 (1)
border border
border border
  border
   #129. 無題(2)
    By 최지훈 At 9/6/2010
   #128. 無題
    By 최지훈 At 9/3/2010
   127. [예약구매] 실전. jQ...
    By 최지훈 At 6/13/2010
   #126. 무제
    By 최지훈 At 5/23/2010
   #125. 요즘 근황?
    By 최지훈 At 4/15/2010
   #124. ASP.NET 4 책을...
    By 최지훈 At 3/12/2010
   #97. ASP.NET 4 New...
    By 최지훈 At 2/12/2010
   #96. ASP.NET 4 New...
    By 최지훈 At 2/10/2010
   #95. ASP.NET 4 New...
    By 최지훈 At 2/9/2010
   #94. ASP.NET 4 New...
    By 최지훈 At 2/2/2010
border border
border border
  border
   태풍의 끝자락이 대지를 쓸고 지나...
    By 조재문 At 9/7/2010
   배는숨겨야지 에서 나도 모르게 빵...
    By ㅋㅋ At 8/17/2010
   Sorry. I don't hav...
    By 최지훈 At 8/16/2010
   내 생애 번역서는 이걸루 끝이다....
    By 최지훈 At 8/16/2010
   네..^^;; 저도 감사합니다.
    By 최지훈 At 8/16/2010
   IIS 버전이 업그레이드되면서 해...
    By 최지훈 At 8/16/2010
   나중에 비슷한 차로 태워는 줄께~...
    By 최지훈 At 8/16/2010
   나도 사주세요 저 차
    By ㅋㅋ At 8/12/2010
   저도 URL Rewriting 이...
    By 초보 At 8/7/2010
   감사드립니다^^
    By 이한철 At 7/28/2010
border border