사용자가 ASP.NET MVC에서 HTML을 입력하도록 허용 -ValidateInput 또는 AllowHtml
사용자가 ASP.net MVC를 사용하여 HTML을 특정 필드에 입력 할 수있게해야합니까?
컨트롤러 에서이 복잡한에 매핑되는 많은 필드가있는 긴 형식이 있습니다.
하나의 필드 (설명)를 작성하여 나중에 내 위생을 수행 할 HTML을 허용하고 싶습니다.
다음 속성을 HTML에 허용하려는 유료의 조치 (게시)를 추가하십시오.
[ValidateInput(false)]
편집 : 당으로 Charlino의 의견 :
web.config에서 사용 된 유효성 검사 모드를 설정하십시오. MSDN 참조 :
<httpRuntime requestValidationMode="2.0" />
2014 년 9 월 편집 : 스프린터 별 252 개의 댓글 :
이제 [AllowHtml]
속성을 사용 합니다. MSDN 에서 아래를 참조하십시오 .
ASP.NET MVC 3 응용 프로그램의 경우 모델에 HTML을 다시 게시해야하는 경우 ValidateInput (false)을 사용하여 요청 유효성 검사를 해제하지 않습니다. 다음과 같이 모델 속성에 [AllowHtml]을 추가하십시오.
public class BlogEntry { public int UserId {get;set;} [AllowHtml] public string BlogText {get;set;} }
무엇에 대한 [AllowHtml]
특성 위의 속성?
모델에 추가 :
using System.Web.Mvc;
그리고 당신의 재산에
[AllowHtml]
[Display(Name = "Body")]
public String Body { get; set; }
내 시점 에서이 코드는 가장 좋은 방법은이 오류를 피하는 것입니다. HTML 편집기를 사용하는 경우 이미 제한되어 있으므로 보안 문제가 없습니다.
[AllowHtml]
수준을 낮출 보안 것을 제안하는 블로그와 의견이 많으므로 허용 할 수없는 특정 속성을 추가 하는 것이 좋습니다.
MVC 프레임에서 컨트롤러가 작동하고 해당 컨트롤러의 코드가 실행될 수 있습니다.
그러나 코드, 필터에 따라 응답이 생성되는 방식 및 다른 오류를 유발할 수있는 추가 유효성 검사가 있는지 여부에 따라 발생합니다.
어쨌든 컨트롤러 [AllowHtml]
에서 HTML을 구성 화 해제 할 수 있으므로 속성 추가 가 정답입니다. 뷰 모델의 예 :
[AllowHtml]
public string MessageWithHtml {get; set;}
[System.Web.Mvc.AllowHtml]
일부 답변에 설명 된대로 관련 속성에 추가했지만 문제에 직면했습니다 .
제 경우에는 MVC 유효성 검사가 수행 되기 전에 권한 UnhandledExceptionFilter
요청에 액세스 하는 클래스가 있으므로 AllowHtml이 적용되지 않은 액세스가 발생합니다 .[HttpRequestValidationException] A potentially dangerous Request.Form value was detected from the client
즉, Request 해당의 특정 속성에 액세스하면 유효성 검사 (내의 경우에는 Params
속성) 가 암시 적으로 실행 됩니다.
유효성 검사를 방지하는 솔루션은 MSDN에 설명되어 있습니다.
요청의 특정 필드 (예 : 입력 요소 또는 쿼리 검사 값)에 대한 요청 유효성을 구매하고 다음 예제와 같이 항목을 찾을 때 Request.Unvalidated 메서드를 호출하십시오.
따라서 이와 같은 코드가 권한 부여
var lParams = aRequestContext.HttpContext.Request.Params;
if (lParams.Count > 0)
{
...
로 변경
var lUnvalidatedRequest = aRequestContext.HttpContext.Request.Unvalidated;
var lForm = lUnvalidatedRequest.Form;
if (lForm.Count > 0)
{
...
또는 Form
유효성 검사를하지 않는 보이지 않는 속성을 사용하십시오
var lForm = aRequestContext.HttpContext.Request.Form;
if (lForm.Count > 0)
{
...
action-method 매개 변수 ( "모델 속성"과 반대 )에 html 입력을 허용해야하는 경우 기본 제공 방법은 없지만 사용자 정의 모델을 사용하여 쉽게 수행 할 수 있습니다.
public ActionResult AddBlogPost(int userId,
[ModelBinder(typeof(AllowHtmlBinder))] string htmlBody)
{
//...
}
AllowHtmlBinder 코드 :
public class AllowHtmlBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var request = controllerContext.HttpContext.Request;
var name = bindingContext.ModelName;
return request.Unvalidated[name]; //magic happens here
}
}
내 블로그 게시물에서 전체 소스 코드와 설명을 찾으십시오. https://www.jitbit.com/alexblog/273-aspnet-mvc-allowing-html-for-particular-action-parameters/
NopCommerce를 사용하여 E-Commerce 사이트를 개발하는 동안이 문제에 직면했으며 이전 답변과 같이 3 가지 방법 으로이 솔루션을 얻었습니다. 그러나 NopCommerce 구조에 따르면 한 번에 세 가지를 찾지 못했습니다. 나는 그들이 단지 사용 [AllowHtml]
하고 있고 어떤 문제를 제외하고는 잘 작동 한다는 것을 방금 보았다 . 이전 질문으로 질문
개인적으로 저는 [ValidateInput(false)]
안전하지 않은 전체 모델 엔티티 검사를 건너 뛰기 때문에 선호하지 않습니다 . 근데 누구라도 글을 쓰면 여기를보세요
[AllowHtml]
public string BlogText {get;set;}
그런 다음 단일 속성 만 건너 뛰고 특정 속성 만 허용하고 다른 모든 항목을 거의 확인하지 않습니다. 그러므로 그것은 나의 것보다 바람직해 보인다.
제 경우에는 AllowHtml 특성이 OutputCache 작업 필터와 결합 될 때 작동하지 않았습니다. 이 대답 은 저에게 문제를 해결했습니다. 이것이 누군가를 돕기를 바랍니다.
데이터의 URL 인코딩은 저에게도 효과적입니다.
예를 들면
var data = '<b> 안녕하세요 </ b>'
게시하기 전에 브라우저에서 encodeURIComponent (data) 호출
서버에서 HttpUtility.UrlDecode (received_data)를 호출하여 디코딩합니다.
이렇게하면 HTML을 사용할 수있는 필드 영역을 정확하게 제어 할 수 있습니다.
'IT' 카테고리의 다른 글
"인증서"는 무엇입니까? (0) | 2020.07.21 |
---|---|
페이지를 새로 고치지 않고 URL 변수 제거 (0) | 2020.07.21 |
처음으로 다섯 문자를 얻는 방법 (0) | 2020.07.21 |
기능 계승 함수 (0) | 2020.07.21 |
완성 화 자바 펼쳐 양식 (프레임 워크 없음) (0) | 2020.07.21 |