2014년 10월 23일 목요일

클라이언트에서 잠재적 위험이 있는 Request.Form 값을 발견했습니다.

닷넷으로 작업하다 보면 "클라이언트에서 잠재적 위험이 있는 Request.Form 값을 발견했습니다. " 라는 오류를 만날때가 있다.


이건 파라메타 값에 html 태그( < ... > ) 같은 특수문자가 포함 되어 있을 경우 발생하는 에러다.
당연히 보안상 안쓰는게 제일 좋지만, 문제는 html 태그를 꼭 써야 할 경우도 생긴다는게 문젠데...

보통 이런경우 해당 페이지에 

ValidateRequest="false" 

라는 페이지 속성을 지정해 주면 해당 페이지만 예외가 적용되어 파라메터값이 Html 태그가 사용 가능하게 된다.

하지만... 이건 .NetframeWork 3.5 이전 까지만 그렇고, .NetframeWork 4.0 이후에는 ...



이렇게 페이지 속성을 지정해 놓았음에도 불구하고, 여전히 같은 오류가 발생한다.

그러므로, .NetframeWork 4.0 이후 버전으로 작업할 경우에는 web.config 파일에다가,



이렇게 지정해 놓으면 .NetframeWork 3.5 이전과 같이 페이지 별로 허용 여부를 지정할 수 있다.
도대체 왜!! 바로 이전버전까지 잘 지원되던 기능을 갑자기 빼버렸는지 모르겠지만...

MSDN 을 참고해 보면 .
(http://msdn.microsoft.com/ko-kr/library/system.web.configuration.httpruntimesection.requestvalidationmode(v=vs.110).aspx)

RequestValidationMode 속성은 사용할 ASP.NET 유효성 검사 방법을 지정합니다. 버전 4보다 이전 버전의 ASP.NET에서 사용되는 알고리즘 또는 .NET Framework 4에서 사용되는 버전입니다. 속성을 다음과 같은 값으로 설정할 수 있습니다. 
  • 4.0(기본값). HttpRequest 개체는 HTTP 요청 데이터에 액세스할 때마다 요청 유효성 검사를 트리거할지 여부를 나타내는 플래그를 내부적으로 설정합니다. 쿠키 및 URL과 같은 데이터가 요청 중에 액세스되기 전에 요청 유효성 검사가 트리거되도록 보장합니다. 구성 파일의 pages 요소(있을 경우) 또는 개별 페이지의 @ Page 지시문의 요청 유효성 검사 설정이 무시됩니다.
  • 2.0. 모든 HTTP 요청이 아닌 페이지에 대해서만 요청 유효성 검사가 사용됩니다. 뿐만 아니라, 구성 파일의 pages 요소(있을 경우) 또는 개별 페이지의 @ Page 지시문의 요청 유효성 검사 설정이 유효성 검사할 페이지 요청을 결정하는 데 사용됩니다. 
이 속성에 할당하는 값은 특정 버전의 ASP.NET과 일치하도록 유효성이 검사되지 않습니다. 4.0 보다 작은 숫자 값(예: 3.72.9 또는 2.0)은 2.0으로 해석됩니다. 4.0 보다 큰 수는 4.0로 해석됩니다.
라고 한다.
뭔말인지 이해가 잘 안되지만, 결론적으로 .NetframeWork 4.0 이후에는 각 페이지의 @page 지시문의 유효성 검사설정이 무시되니, 아예 다 풀거나, 아예 다 막거나 둘중 하나를 선택하라는 내용같다.
아... 너무 자꾸 바뀌니까 이젠 왜 그런지 알아보기도 귀찮다...