문제

asp.net mvc(C#) 애플리케이션에서 자바스크립트 삽입을 어떻게 처리할 수 있나요?

내 보기에서 Html.Encode를 사용할 수 있습니다.하지만 문제는 블로그 게시물처럼 페이지에 표시할 HTML도 있다는 것입니다.

애플리케이션의 입력 요소에 입력된 스크립트를 제거해야 합니까?일반적인 장소에서 어떻게 할 수 있나요?

도움이 되었습니까?

해결책

이를 수행하기 위한 "상위 수준" 모범 사례는 다음과 같습니다.

  • 사용자 입력이 시스템에 입력된 방식으로 저장됩니다.
  • 모든 페이지에 출력될 때 모든 사용자 입력을 HTML로 인코딩합니다.
  • 허용되는 HTML 문자, 속성, 속성 값 등을 "디인코딩"하려면 화이트리스트 접근 방식을 사용하세요.이전 단계에서 인코딩한

출력 시 사용자 입력을 HTML로 인코딩하면 사이트에서 JavaScript가 실행되지 않습니다.

사용자 입력을 "입력한 대로" 저장하려는 이유는 나중에 동일한 인코딩 규칙이 없는 다른 형식(PDF, 이메일, JavaScript, RSS 등)으로 사용자 데이터를 출력하기로 결정할 수 있기 때문입니다. .따라서 데이터를 가능한 한 원래 형식에 가깝게 유지해야 합니다.이렇게 하면 나중에 문제를 더 쉽게 처리할 수 있습니다.

HTML 인코딩 사용자 입력의 경우 다음을 사용할 수 있습니다. System.Web.HttpUtility.HtmlEncode(...).

2단계와 3단계를 결합하려면 Microsoft의 AntiXSS 라이브러리.작업을 더 쉽게 만들기 위해 HttpUtility 클래스가 제공하지 않는 몇 가지 추가 인코딩 방법을 제공합니다.나는 Malcolm이 댓글에서 이 라이브러리의 최신 버전에 GetSafeHtmlFragment(...) 그러면 모든 JavaScript가 수동으로 제거됩니다.그러면 사용자가 입력한 JavaScript 코드를 제거하는 모든 어려운 작업이 처리됩니다.당신은 아마도 사용하고 싶을 것입니다 GetSafeHtmlFragment 그리고 ~ 아니다 GetSafeHtml, 전체 HTML 문서를 인코딩하도록 설계되었습니다.

사소한 참고사항: 기능이 예상대로 작동하지 않는 경우 최신 AntiXss 릴리스(이 글을 쓰는 시점인 2012년 1월)에 대한 리뷰를 읽어 보십시오.필요에 따라 이전 릴리스 사용을 고려할 수 있지만 이전 릴리스에는 알려진 보안 결함이 있다는 점에 유의하세요. Microsoft는 이 문제를 인정하고 해결 방법을 찾고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top