asp.net
  • data-binding
  • xss
  • 2013-03-26 1 views 13 likes 
    13

    바보 같은 질문이 있으면 용서해주세요. 나는 명시 적으로 대답을 찾을 수 없었습니다.XSS로부터 보호하기 위해 Bind() 또는 Eval()이 자동으로 HtmlEncode를 수행합니까?

    나는 거의 내 영문 페이지에 바인딩() 또는 평가()를 사용하지 않고, 대신에 다음 구문을 사용합니다

    <asp:Label id="lblFirstName" runat="server" Text='<%# Microsoft.Security.Application.AntiXss.HtmlEncode(DataBinder.Eval(Container.DataItem, "FirstName").ToString()) %> 
    

    내가 이것을 일을 시작했다 (이것은 Repeater 컨트롤에 ItemTemplate을에 가정) 오래 전, 간단히 질문하지 않았지만, 지금은 과도 할 수도 있습니다. 그리고 지금은 사방이 구문을 사용하는 CMS 사용하고 있습니다 :

    <asp:Label id="lblFirstName" runat="server" Text='<%# Bind("FirstName") %> 
    

    그래서 나는 기본적으로 궁금하네요을 내가 바인딩() 또는 평가가() 런타임 자동으로 출력 대해 HTMLEncode 않습니다를 사용하는 경우? 나는 불필요한 코딩을 계속하고 있 었는가?

    답변

    18

    Bind() 및 Eval()은 해당 유형을 방지하기 위해 아무 것도하지 않으며 인코딩하지 않습니다. <%# %> 스타일 코드 블록 역시 마찬가지입니다.

    그러나 ASP.NET 4 이상을 사용하는 경우에는 <%: %> 블록을 사용하여 응답 쓰기 유형 상황을 처리하고 <%#: %> 데이터 바인딩 상황을 처리 할 수 ​​있습니다.

    Scott Guthrie는 이것에 대해 큰 post을 가지고 있습니다.

    +0

    Goocd가 보이지만 DataBinding 컨텍스트에서 볼 수있는 것처럼 ''(Response.Write 해당)에 해당하는 것 같지 않습니다. '<%# %>'블록이 아닙니다. 실제 데이터 바인딩 된 컨트롤에 해당하는 속기가 있습니까? – David

    +1

    괜찮습니다. 여기에 4.5 버전이 있습니다. http://www.asp.net/vnext/overview/aspnet/whats-new#_Toc318097391 올바른 방향으로 나를 안내해 주셔서 감사합니다! – David

    +0

    David 죄송합니다. 답변도 업데이트했습니다. –

    관련 문제