크로스 사이트 스크립팅
DAST 검사 79.1 - 크로스 사이트 스크립팅(XSS) 취약점에 대한 설명과 해결 방법입니다.
설명 # 크로스 사이트 스크립팅(XSS)은 웹 애플리케이션이나 시스템이 사용자 입력을 마크업이나 스크립트 코드로 처리하도록 악용하는 공격입니다. 사용되는 특정 컨텍스트에 따라 데이터를 인코딩하는 것이 중요합니다. 컨텍스트 유형은 최소 여섯 가지가 있습니다: HTML 태그 내부 <div>컨텍스트 1</div> 속성 내부: <div class="컨텍스트 2"></div> 이벤트 속성 내부 <button onclick="컨텍스트 3">버튼</button> 스크립트 블록 내부: <script>var x = "컨텍스트 4"</script> 안전하지 않은 요소 HTML 할당: element.innerHTML = "컨텍스트 5" URL 내부: <iframe src="컨텍스트 6"></iframe><a href="컨텍스트 6">링크</a> 스크립트 블록만으로도 여러 방식으로 인코딩될 수 있습니다. 사용자 입력이 스크립트 태그 외부에 작성되어야 하는 경우 주의해야 합니다. 해결 방법 # 애플리케이션에 표시되는 사용자 입력은 HTML로 처리되거나 JavaScript 코드로 실행되지 않도록 인코딩, 살균(sanitize) 또는 유효성 검사를 해야 합니다. 서버 측 템플릿과 클라이언트 측 템플릿을 혼합하지 않도록 주의하세요. 서버 측은 클라이언트 측 기능을 실행할 수 있는 {{ 7*7 }} 와 같은 텍스트를 인코딩하지 않기 때문입니다. 데이터 저장소에 삽입하기 전에 사용자 입력을 인코딩하지 마세요. 데이터는 출력 컨텍스트에 따라 인코딩되어야 합니다. 표시 시스템이 인코딩을 처리하도록 강제하는 것이 훨씬 안전합니다. 사용자 입력을 자동으로 인코딩하는 내장 프레임워크 기능 사용을 고려하세요. 입력을 자동으로 인코딩할 수 없다면 적절한 출력 인코딩을 사용하도록 주의하세요. 다음 권장 사항은 최선의 노력이며 모든 상황에서 작동하지 않을 수 있습니다. script 를 제외한 HTML 태그 내부에서 다음을 인코딩합니다: < 를 &lt; 로 > 를 &gt; 로 ' 를 &apos; 로 " 를 &quot; 로 = 를 &#61; 로 이벤트 속성을 제외한 속성 내부에서 다음을 인코딩합니다: < 를 &lt; 로 > 를 &gt; 로 ' 를 &apos; 로 " 를 &quot; 로 = 를 &#61; 로 이벤트 속성, 스크립트 블록, 안전하지 않은 HTML 할당 내부에서 다음을 인코딩합니다: 리터럴 탭 ( \t )을 \\t 로 리터럴 개행 ( \n )을 \\n 으로 리터럴 수직 탭 ( \v )을 \u000b 로 리터럴 폼 피드 ( \f )를 \\f 로 리터럴 캐리지 리턴 ( \r )을 \\r 로 리터럴 등호 ( = )를 \u0061 로 리터럴 역따옴표 ( \ )를 \u0060 으로 리터럴 큰따옴표 ( " )를 \u0022 로 리터럴 앰퍼샌드 ( & )를 \u0026
