XSS ( Cross Site Scripting )
XSS ( Cross Site Scripting ) 란?
XSS는 클라이언트 사이드의 취약점 중 하나로, 공격자가 웹 리소스에 악성 스크립트를 삽입하여
이용자의 웹브라우저에서 해당 스크립트를 실행할 수 있는 방법을 말한다. 이를 이용하여 공격자는
특정 계정의 세션 정보를 탈취하고, 해당 계정을 이용하여 임의의 기능을 수행할 수 있다.
대부분 자바스크립트를 이용한 공격이 이루어지며, SQL Injection 과 함께 웹 취약점 중 가장 기초적인 취약점으로
알려져 있어 방지하는 기술도 있지만, 이를 우회하는 기술이 다양해지면서 사실상 완전한 방어가 힘든 취약점이다.
XSS의 종류
| 종류 | 설명 |
| Stored XSS | XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 방식 |
| Reflected XSS | XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 방식 |
| DOM - based XSS | XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 방식 |
| Universal XSS | 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 방식 |
XSS로 발생할 수 있는 피해
1. 쿠키 및 세션 정보 탈취
XSS에 취약한 게시판 등에 사용자의 쿠키나 세션 정보를 탈취하는 스크립트를 삽입하여
게시글을 열람하는 유저들의 정보를 탈취하여 인증을 회피하거나 권한을 얻을 수 있다.
2. 악성 프로그램 설치 유도
XSS 만으로 악성 프로그램을 다운로드하게 만들 수는 없으나,
스크립트를 통해 악성 프로그램을 다운받는 사이트로 리다이렉트 시켜 다운을 유도할 수 있다.
3. 의도하지 않은 페이지 노출
XSS를 사용하여 <img> 태그 등을 삽입하여 본래의 내용과 전혀 상관없는 페이지를 노출하거나
페이지 자체를 수정하여 페이지의 정보를 악의적으로 편집할 수 있다.
XSS 대응 방법
- 입력 값의 길이 제한 (이메일, 아이디, 패스워드 등)
- replace 와 같은 함수를 이용한 치환
- '<' , '>' 와 같이 태그에 사용되는 기호를 엔티티코드로 변환
- 입력 값에 대한 유효성 검사 (반드시 클라이언트가 아닌 서버에서 수행)
- HTML 태그 사용이 필요한 경우 화이트리스트를 만들어 특정 태그의 입력만 허용