2012-01-10 6 views
10

에 대한 게시물의 HtmlEncode 나는 Html.TextAreaFor 컨트롤이있는 ASP.Net MVC 3 페이지가 있습니다. 아래 코드를 참조하십시오. 내가 좋아하는 꺾쇠 괄호 텍스트로 HTTP 게시 작업에 페이지를 제출하려고하면 (ASP.Net MVC 3 Html.TextAreaFor

잠재적 위험으로 Request.Form 값이 클라이언트에서 발견 된 RequestText을 : <test>, 나는 말 노란색 오류 화면을 얻을 = "").

내가 닷넷 4의 새로운 <%: %> 구문을 말한다 an article by Scott Guthrie을 발견하기 때문에 자동으로,이 것 얻고 이유를 이해하지 못한다는 요소를 대해 HTMLEncode. Html.TextAreaFor 컨트롤에 대해 < % : %> 구문을 사용하고 있기 때문에 자동으로이를 처리하고 꺾쇠 괄호를 적절한 "& lt"으로 변환한다고 생각했습니다. 및 "& gt"문자열이 있습니다.

<% using (Html.BeginForm()) 
    { %> 
    <%: Html.ValidationSummary() %> 
    <h2>Enter a description of the support needed</h2> 
    <%: Html.TextAreaFor(m => m.RequestText, 4, 90, null) %> 
    <input type="submit" value="Submit" /> 
<% } %> 

답변

18

는 기본적으로 지금, 당신은 출력TextAreaFor의 내용을 인코딩하고 있습니다. 당신이 입력을 처리하려는 때문에 이것은 조금에 도움이되지 않습니다 당신이 "위험한"내용을 제출하려면

, 당신은 하나

1) 내에서 RequestText 속성을 장식 할 필요가 당신의 ViewModel에 [AllowHtml]. (선호)

[AllowHtml] 
public string RequestText { get; set; } 

2) 해제 validateRequest

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime requestValidationMode="2.0" /> 
</system.web> 

그럼 당신은 당신이 적절하게 데이터를 살균 및/또는 저장소 층 또는에 제출하기 전에 컨트롤러를 인코딩하고 확인해야합니다 데이터 베이스.

+0

체이스 - 나는 [AllowHtml]을 사용하지 않을 것이고, 컨트롤러 동작으로 다시 게시 할 때 .net 프레임 워크 html로 텍스트를 인코딩 할 수있는 방법이없는가요? –

+1

컨트롤러에서 수동으로 인코딩합니다. 인코딩되지 않은 데이터를 게시하지 않으려는 것은 데이터 계층입니다. 컨트롤러 레벨에서 이것을 처리해야합니다. –

+0

기본적으로 HTML은 데이터를 인코딩 할 수 없습니다. Javascript를 사용할 수는 있지만 단순히 JS를 사용 중지 할 수 있기 때문에 좋지 않습니다. 이 작업을 수행하는 유일한 확실한 방법은 클라이언트 수준이 아니라 서버 수준입니다. –

6

당신은 AllowHtmlAttribute와 뷰 모델에 RequestText 속성을 꾸밀 수 :

[AllowHtml] 
public string RequestText { get; set; } 

이 방법은이 속성으로 만 HTML 제출 클라이언트 권한을 부여하고 있습니다.

구문과 관련해서는 페이지에 출력하기 전에 HTML 인코딩에 사용됩니다. XSS 공격으로부터 보호하기 위해 사용됩니다. 그것은 당신이 페이지에 출력하지 않기 때문에 귀하의 경우에는 관련이 없으며 요청에 HTML 문자를 받고 있습니다.

+0

'@ Html.Raw (model.RequestText) '를 사용해야합니까? 또는 내부 MVC 프레임 워크는 렌더링하는 동안주의를 기울일 것입니까? –