웹 서비스(게시판 등) 요청(스크립트 게시 등)과 응답결과(스크립트를 포함한 웹 페이지)에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
(입력데이터 검증 및 표현) 크로스사이트 스크립트
국정원은 이 해킹 메일을 분석한 결과 클릭 시 로그인 화면이 표시되는데 동시에 아이디와 비밀번호 입력여부와 상관없이 iFrame 태그 등을 이용해 은밀히 악성 PDF파일을 다운로드하고 실행시켜 해당 PC에 자료를 유출하는 악성코드를 설치한다고 설명했다.
① 사용자로부터 입력 받은 값을 동적으로 생성되는 응답페이지에 사용하는 경우 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.
② DB조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML인코딩 또는 크로스사이트스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.
① 입력값에 대해 필터링 또는 인코딩 정책을 적용하는 공통코드를 작성하여 웹 컨테이너, 또는 MVC 프레임워크에 적용
(ㄱ) 필터를 이용한 입력값 검증
웹 컴포넌트인 Filter를 사용하여 사용자의 입력값에 대해 XSS 필터나 HTML인코딩을 적용하여 안전한 값으로 치환한 뒤 사용할 수 있도록 모든 애플리케이션에 일괄 적용
(ㄴ) 인터셉트를 이용한 입력값 검증
MVC프레임워크를 사용하는 경우 Interceptor 컴포넌트를 사용하여 사용자의 입력값에 대해 XSS 공격 패턴의 문자열이 포함되었는지를 검사하여 요청을 차단 또는 허용하는 정책을 모든 애플리케이션에 일괄 적용
(ㄷ) 라이브러리 또는 Validator 컴포넌트를 이용한 입력값 검증
공통코드로 입력값을 검증하는 Validator 컴포넌트를 작성하여 XSS 공격패턴의 사용자 입력값을 필터링할 수 있도록 설계
② 각각의 컴포넌트에서 출력값에 대해 XSS필터 또는 HTML인코딩을 적용하여 안전한 값만 응답에 사용
(ㄱ) View 컴포넌트에서 출력값에 대해 HTML인코딩 적용
View 컴포넌트에서 사용자 입력값을 동적으로 생성되는 응답페이지에 사용하는 경우 XSS필터 또는 HTML인코딩을 적용하여 코드를 작성하도록 시큐어코딩 규칙을 정의
(ㄴ) DB조회 결과값에 대한 XSS 필터 적용
DB조회 결과값으로 응답페이지를 생성하는 경우 XSS 필터를 적용하여 사용
DB에서 읽어오는 데이터도 외부 입력값의 범위에 포함시켜, 응답페이지에 출력하기 전에 반드시 검증작업을 수행
DB에서 읽어온 값에 대한 검증작업을 프레임워크의 컴포넌트로 일괄 필터링하는 것이 어려움
각 개발자들은 출력값에 대해 검증 작업을 수행해야 하는데, 이러한 설정은 개발가이드 구현단계에 항목을 작성하여 적용
HTML, URL 등의 문자를 인코딩 및 필터링하여 XSS 취약점을 최소화할 수 있도록 다음과 같은 라이브러리의 사용을 고려
ASP.NET
MS Anti‐XSS Library, MS AntiXSSEncoder 클래스, HTML Sanitizer 라이브러리
Java : LUCY XSS Filter, OWASP ESAPI XSS Filter
PHP : HTML Purifier 라이브러리