[Web] 크로스사이트 스크립팅 (XS)

크로스사이트 스크립팅

 

취약점 개요

■ 위험도
- 상

■ 점검 목적
- 웹 페이지 내 크로스사이트 스크립팅 취약점을 제거하여 악성 스크립트의 실행을 차단

■ 보안 위협
- 웹 애플리케이션에서 사용자 입력 인수 값에 대한 필터링이 제대로 이루어지지 않을 경우, 사용자 인수 값을 받는 웹 사이트 게시판, URL 등에 악의적인 스크립트를 삽입하여 게시글이나 이메일을 읽는 사용자의 쿠키, 세션을 도용하거나 악성코드(URL 리다이렉션)를 유포할 수 있음

점검 및 조치 방법

■ 점검 및 판단 기준
- 양호 : 사용자 입력 인수 값에 대한 검증 및 필터링이 이루어지는 경우
- 취약 : 사용자 입력 값에 대한 검증 및 필터링이 이루어지지 않으며, html 코드가 입력, 실행 되는 경우

■ 조치 방법
- 웹 사이트의 게시판, 자료실, URL 등에서 사용자로부터 입력받는 인수 값에 대해 검증 로직을 추가하거나 인수 값이 입력되더라도 실행되지 않게 하고, 부득이하게 게시판이나 html을 사용하는 경우 html 코드 중 필요한 코드에 대해서만 입력 가능하도록 설정

■ 점검 방법
XSS 취약 유형

Step 1) 사용자 인수 값을 입력받는 애플리케이션(회원정보 변경, 게시판, 댓글, 자료실 등) 에 스크립트 입력 후 실행되는지 확인

 

[게시글에 스크립트 삽입(stored)]

 

[스크립트 코드 동작]

Step 2) 사용자 인수 값을 입력받는 애플리케이션 (검색, URL)에 스크립트 입력 후 실행되는지 확인


■ 보안설정방법
Step 1) 게시물에 HTML이나 자바 스크립트에 해당되는 태그 사용을 사전에 제한하고, 사용자가 입력한 인수 값에 대한 필터링 작업 필요
Step 2) 게시물의 본문뿐만 아니라 제목, 댓글, 검색어 입력창, 그 외 사용자 측에서 넘어오는 값을 신뢰하는 모든 form과 인수 값에 대해서 필터링을 수행함
Step 3) 입력 값에 대한 필터링 로직 구현 시 공백 문자를 제거하는 trim, replace 함수를 사용하여 반드시 서버 측에서 구현되어야 함



※ 필터링 조치 대상 입력 값
- 스크립트 정의어 :<script>, <object>, <embed>, <form>, <iframe> 등
- 특수문자 : < > " ' & % %00(null) 등

Step 4) URLDecoder 클래스에 존재하는 decode 메소드를 통해 URL 인코딩이 적용된 사용자 입력 값을 디코딩함으로써 우회 공격 차단

Step 5) 웹 방화벽에 모든 사용자 입력 폼을 대상으로 특수문자, 특수구문 필터링하도록 룰셋 적용

※ 애플리케이션 별 보안 설정 방법

ASP

 

PHP

 

JSP


※ 참고 : 필터링 대상

 

■ 용어 설명 / 팁
※ 크로스사이트 스크립팅 : 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법으로 공격 방식은 크게 stored 공격 방식 과 Reflected 공격 방식으로 나누어 짐
※ OWASP - XSS 필터링 관련 참고

댓글

Designed by JB FACTORY