2011-01-27 9 views
11

XML 파일을 처리 할 수있는 작업이있는 MVC3 (베타 버전 또는 릴리스 후보 버전, RTM/RTW 버전 없음)을 기반으로하는 웹 앱이 있습니다.MVC3 AllowHtml 속성 문제

물론 이것은 가능한 공격으로 인해 MVC에서는 악의적 인 것처럼 보이므로 허용되지 않습니다.

public class XMLModel 
    { 
     [AllowHtml] 
     public string msg { get; set; } 
    } 

아니면 이와 같은 내 행동 방식에 false로 ValidateInput을 설정 : 글쎄, 난 같은 모델 객체에 하나 AllowHtml를 넣어하려고

[ValidateInput(false)] 
    public ActionResult AddCDR(XMLModel model) 
    { 
    } 

는 "강하게을 가진 이유 "처음에 형식화 된 모델은 원래"msg "라는 문자열 값을 작업 메서드 매개 변수로 사용하려했지만 항상 빈 상태로 되돌아갔습니다.

누군가가 같은 컴퓨터 나 네트워크로 연결된 컴퓨터에서이 양식에 게시하면 msg 필드는 항상 공백입니다.

데이터가 실제로 요청에 있음을 WireShark에서 확인했습니다.

이제 재미있는 한 가지. MVC 3에서는이 작업이 필요하지 않습니다. 그러나 그것은 약간의 차이를 만듭니다.

내 웹 설정이를 추가하는 경우 :

<httpRuntime requestValidationMode="2.0" /> 

그것은 로컬 컴퓨터에서 발생하는 요청을 작동하지만 다른 시스템에서 작동하지 않습니다.

AllowHtml 버전이 우아한 것처럼 보인다고 생각합니다.

나는 또한 RC2에서이 문제에 대해 알아 발견

는 - 어쨌든) (다시, 이것은 나에게 영향을 미치지 않습니다,하지만 난 위해 Application_Start에 다음을 추가하려고 :

예상대로
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider(); 

, 그것은 진짜하지 않습니다 차.

모든 것이 내 개발 컴퓨터 (Win7x64, VS2010)에서 예상대로 작동하지만 대상 시스템 (Win2008R2x64, IIS7.5)에서는 위의 문제로 인해 어려움이 있습니다.

중요 사항 참고 : 꺾쇠 괄호없이 작업에 게시하면 예상대로 양식 데이터가 표시됩니다. 꺽쇠 괄호가 나타나 자마자 내 액션이 전혀 호출되지 않거나 액션 메소드 매개 변수 나 예를 들어 Request.Params [ "msg"]에서 폼 데이터를 찾지 못합니다. 해야한다.

XML을 통해 허용 할 수있는 아이디어가 있습니까?

사람이 여기에 대한 답변을 마련하기 위해 내가 기다리는 동안이 문제를 내 방식으로 작동하려고했습니다

UPDATE. 아직 해결할 수 없지만 몇 가지 추가 세부 정보를 확인했습니다.

  • 먼저 개발 용 컴퓨터와 웹 서버 모두에 설치된 ASP.NET MVC 3 버전이 동일한 지 확인했습니다. v3.0.20105.0 (프로그램 추가/제거에 따라).
  • 웹 응용 프로그램은 실제로 MVC3 베타로 생성 된 다음 RC1 및 RC2로 변환되어 최종적으로 RTM 버전으로 변환되었습니다. 이것은 ViewBag 변경으로 인해 일부 코드를 수정해야한다는 것을 의미했습니다. 그러나 내가 무엇이 바뀌 었는지 정확히 알지 못했기 때문에 RTM 버전의 새로운 MVC3 응용 프로그램을 만들었고 동일한 작업 메서드로 동일한 이름으로 컨트롤러를 만들고 현재 사용 된 것과 비슷한 모델 개체를 사용했습니다 이전 웹 응용 프로그램 디렉토리의 이름을 바꾸고이 새로운 웹 응용 프로그램 디렉토리를 제자리에 두었습니다. 똑같은 일이 발생합니다. 즉, AllowHtml 속성을 가진 매개 변수는 로컬 컴퓨터에서 요청을 받았을 때 모든 콘텐츠를 처리하지만 원격 컴퓨터에서 요청한 경우 HTML (XML)이 제거됩니다.
    • 예외 사항은 없습니다. 나는 Elmah를 설치했고 이것을 검증했다. 예외는 발생하지 않는다. XML의 메소드에서 매개 변수를 제거한 것으로 보이는 액션 메소드가 호출된다.

말할 필요도없이이 나를 미치게된다. 어제 MVC3의 소스 코드를 살펴볼 조언이 있었지만, 불행히도 저에게 도움이되지 않습니다. 분명히 잘못된 것을 볼 수 없기 때문에 문제의 서버에서 코드를 디버그 할 수 없습니다.

통찰력은 여전히 ​​매우 필요합니다. 감사합니다! :)

답변

3

이것은 분명하지 않은 상황이며 MVC3이 문제가 아니기 때문에이 답변에 동의합니다.

내 응용 프로그램에 데이터를 게시 한 시스템이 조작 된 데이터를 사용하고있었습니다. 그 외에도, 그들은 잘 작동하는 오래된 MVC2 응용 프로그램에 게시 중이라고 들었습니다. 이것은 틀렸고, 그 경우에 얻은 것으로 밝혀졌으며 올바르게 수행되었습니다.

상당히 철저한 테스트를 통해 AllowHtml 특성이 실제로 제대로 작동하는지 확인할 수 있습니다. 너의 의견을 절대로 믿지 마라. :)

7

나는 이것을 재현 할 수 없다.

모델 :

using System.Web.Mvc; 

namespace MvcApplication3.Models { 
    public class XmlModel { 
     [AllowHtml] 
     public string msg { get; set; } 
    } 
} 

컨트롤러 :

using System.Web.Mvc; 
using MvcApplication3.Models; 

namespace MvcApplication3.Controllers { 
    public class HomeController : Controller { 
     public ActionResult Index() { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Index(XmlModel model) { 
      return View(); 
     } 
    } 
} 

보기 :이 기본 빈 MVC 3 프로젝트에 추가 된

@model MvcApplication3.Models.XmlModel 

@using (Html.BeginForm()) { 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.msg) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.msg) 
     @Html.ValidationMessageFor(model => model.msg) 
    </div> 
} 

. 모든 게시물 괜찮아. [AllowHtml]을 제거하면 적절한 오류 메시지가 생성됩니다.

+0

감사합니다, Brad, 많이 감사합니다! 나는 이것에 대해 몇 가지 진전을 이뤘으며, 오늘 언젠가는 해결책을 확인해 줄 것이다. –