2010-12-29 4 views
4

내가 컨트롤러에 HTML로 게시물을 전송하고, 크롬에서 예외가 발생 해요 :ASP를 MVC "잠재적 위험으로 Request.Form ..."

자원을로드하지 못했습니다 : 서버의 상태와 반응 500 (내부 서버 오류)

.NET 4.0, 웹 서버는이 WebDev는 VS2010에서 내 설정이다 :

<system.web> 
<compilation debug="true" targetFramework="4.0"> 
<assemblies> 
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
<add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies> 
</compilation> 
<httpRuntime requestValidationMode="2.0" /> 
<pages validateRequest="false"> 
<namespaces> 
<add namespace="System.Web.Mvc"/> 
<add namespace="System.Web.Mvc.Ajax"/> 
<add namespace="System.Web.Mvc.Html"/> 
<add namespace="System.Web.Routing"/> 
</namespaces> 
</pages> 

...

내가 무엇을 놓치고 있습니까?

+1

조금 더 자세하게 입력하십시오. –

+2

기본적으로이 질문을 일관되게 만드는 모든 것. –

답변

21

HTML을 허용 할 컨트롤러 동작에 [ValidateInput(false)]을 설정해야합니다. (또는 전체 컨트롤러,하지만 그건에서 .aspx 파일 또는 Web.config의 수행에 RequestValidate 설정. 또 다른 중요한 것은 당신이 이미 가지고 하나의 Web.config에서 <httpRuntime requestValidationMode="2.0" />입니다

. 나쁜 습관이다

이 검증을 요청하지 컨트롤러가 아닌 뷰의로 MVC에서 작동하지

편집 :.. 한편는 MVC 3 출시 된 이것은 당신이 그 (것)들을 안전하게하기 [AllowHtml]와 모델의 개별 속성을 장식 할 수 있습니다 요청 유효성 검사를 완전히 비활성화하지 않고도.

+0

그 작업. thx man – eba

+3

@eba주의해서 사용하십시오.이 값을 사용자에게 재생하면 XSS 공격이 발생할 수 있습니다. HTML 인코딩은 그것을 멈추기에 충분하지 않습니다. –

+1

Professional ASP.NET MVC 4 (Galloway 등)에서 XSS 및 Html 인코딩에 대한 유용한 섹션 - 읽기를 강력히 권장하지만, 4에서 기본 인코더로 AntiXSS를 사용하는 것이 좋습니다 (Nuget 또는 http : // wpl.codeplex.com/). ..... "AntiXSS는 허용 된 문자의 허용 목록을 사용하지만 ASP.NET의 기본 구현에서는 허용되지 않는 문자의 제한된 차단 목록을 사용합니다. 알려진 안전한 입력 만 허용하면 AntiXSS는 잠재적으로 유해한 것을 차단하려고 시도하는 필터보다 안전합니다 입력 .... ".... 다시, 그것은 해결책이 아니지만, 모든 것을 허용하는 것보다 강하다 ... –

4

는 다음 속성에 대한 새 속성을 사용할 수 있습니다 MVC 3 RC를 사용하는 경우와 같은 [AllowHtml]

대신 당신이 XSS 공격을 방지하는 데 도움이되지 않습니다 Action.- 컨트롤러에 [ValidateInput (거짓)] 설정

ASP.NET MVC는 HTML 및 사이트 간 스크립트 삽입 공격을 방지하기 위해 내장 된 지원을 포함, 누군가 시도가 입력으로 HTML 콘텐츠를 게시 할 경우 기본적으로 오류가 발생합니다. 개발자는이를 허용하기 위해 을 명시 적으로 나타내야합니다 (그리고 지원을 위해 이 앱을 안전하게 만들었습니다). ASP.NET MVC 3 , 우리는 지금 또한 이 HTML 입력이 DRY 방법으로 훨씬 더 세부적인 보호를 가능하게하는, 활성화 된 것을 나타 내기 위해서 모델/viewmodels의 속성에 적용 할 수있는 새로운 속성을 지원 있습니다 . 지난 달 RC 릴리스에서이 속성의 이름은 [SkipRequestValidation]이었습니다. 모델/뷰 모델에 위의 [AllowHtml] 속성을 설정하면 모델이 바로 바인딩 HTML 주입 보호를 해제 ASP.NET MVC 3의 원인이됩니다 : RC2으로 우리 는 보다 직관적 만드는 [AllowHtml]으로 개명 그 속성은 입니다.

관련 문제