2011-10-08 2 views
0

DB에서 오는 HTML을 표시하는 데 리터럴 컨트롤이 사용되었습니다. 일부 XSS 문제에 직면하고 모든 HTML 마크 업을 자동으로 인코딩하기 위해 Anti-XSS 보안 런타임 엔진 (SRE)을 구현했습니다. 예 :asp.net의 HTML 인코딩 문제

DB : 나는 뒤에 코드에서 리터럴 내용의 텍스트 속성을 설정하고 때, 나는 문자 그대로의 컨트롤이를 디코딩 할 것이라고 예상하고 있었다 그러나

<p align="center"> </p&#62 

: <p align="center"></p>

안티 XSS는로 인코딩 적절한 HTML 및 렌더링 된 버전 표시. 대신 ENCODED 버전을 표시합니다.

따라서 리터럴 컨트롤에는 <p align="center"></p> postrender가 표시됩니다. 나는 그것이 Anti-xss action임을 이해하지만 어떻게 마크 업 대신 렌더링 된 HTML을 표시하는 리터럴 컨트롤을 얻을 수 있습니까?

ASPX - <asp:Literal ID="ltPageContent" runat="server"></asp:Literal> 
Code behind on page load - ltPageContent.Text = getPageContent("home")'Gets HTML from DB 

나는 여기에 간단한 것을 놓치고 있습니까? XSS는 위험을 고려하지 않고

답변

1

, 당신은 여기 LiteralControl을 잊을 수 있으며, 대신 인라인 코드를 사용 :

ASPX :

<%= Server.HtmlDecode(YOUR_STRING) %> 
+0

고마워요,하지만 난 aspx에 어떤 코드가없는 것을 선호합니다. 코드 숨김의 모든 솔루션? –

+1

글쎄, 컨테이너로 서버 측 HTML 컨트롤이 필요하고 html 문자열을 InnerHtml 속성으로 설정해야합니다. 예를 들어

을 aspx 페이지에 넣으면 배후 코드가 "container.InnerHtml = Server.HtmlDecode (YOUR_STRING);"가 될 수 있습니다. –

0

또한 "통과"의 값으로 "모드"속성을 사용할 수 있습니다 :

<asp:Literal ID="ltPageContent" runat="server" Text="Html Here" 
      Mode="PassThrough" /> 

데이터가 전달되기 전에 XSS를 확인하는 것이 좋습니다.