웹 개발자로서 기본적으로 알아야할 지식에 대해서 포스팅을 하려고 한다.
그 중 기초적인 보안 기술 중 XSS에 대해서 알아보자.

XSS(Cross Site Scripting)이란?

SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로,
악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다.
공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며,
보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다. - 나무위키

웹페이지 내에 악의적인 자바스크립트 코드를 심어넣는 방법으로 공격한다.
예전부터 쓰이는 간단하고 전통적인 공격 방법이지만 많은 사이트들이 이 간단한 공격에 대비를 하지 않아 공격을 받는 경우가 많다.

공격/방어방식 라는 면에서 XSS(자바스크립트 이용해 공격)와 SQL Injection(쿼리를 통해 공격)은 서로 비슷하다고 볼 수 있다.

공격의 방법

  1. 스크립트 태그 안에 심기

    1
    <script>alert(document.cookie)</script>
  2. 서버 응답 결과에 심기

    1
    htt://www.server.com/search/?q=<script>(document.cookie)</script>&xyz
  3. 링크 또는 이미지에 심기

피해 종류

  1. 쿠키 정보/세션 ID 획득
  2. 시스템 관리자 권한 획득
  3. 악성코드 다운로드

예방 방법

1. 태그 문자 무효화

기본적으로 HTML 태그 안에 심어놓는걸 방지.(‘<’. ‘>’) 등의 태그를
서버에서 브라우저로 전송시 다음과 같은 문자로 인코딩해 전송한다.
![](./image/html tag encoding.png)

2. 라이브러리 이용

일일이 개발자가 위와 같이 인코딩하는 것은 무리가 있다.
유명한 라이브러리를 이용하면 손쉽게 처리가 가능하다.
다음과 같은 라이브러리들이 있다.

  • AntiXSS(MS에서 개발)
  • OWASP ESAPI(validator:입력값 필터링, encoder:출력값 인코딩/디코딩)
  • NAVER Lucy XSS filter

3. 쿠키 보안 옵션 이용

쿠키 생성시
‘보안 쿠키’ 파라미터 지정시 TLS 상에서만 사용하게 할 수 있다.
‘HTTP ONLY’ 파라미터 지정시 웹브라우저상에서만 사용하게 할 수 있다.
완전히 방어 가능한 건 아니라고 한다.


출처: 나무위키, 한국인터넷진흥원