1. XSS란?

Cross Site Scripting은 약자로 CSS로 볼 수 있지만 CSS가 이미 Cascading Style Sheets의 약자로 사용하고 있기 때문에 XSS라고 부른다.

 

XSS는 게시판이나 웹 메일 등에 자바 스크립트와 같은 스크립트 코드를 삽입하여 해커가 의도한 기능을 수행하게할 수 있다. 대부분의 웹 해킹 공격 기법과는 다르게 사용자를 대상으로 한 공격이다.

 

XSS 공격은 다음 세가지로 분류할 수 있다.

  • Reflected XSS
  • Stored XSS
  • DOM Based XSS 

Reflected XSS, Stored XSS 에 대해서 살펴 보겠다.

 

2. Reflected XSS

  • 웹 어플리케이션의 지정된 파라미터를 사용할 때 발생하는 취약점을 이용한 공격 방법이다.
  • 검색어 같은 쿼리 스트링을 URL에 담아 전송했을 때 서버가 필터링을 거치지 않고 쿼리에 포함된 스크립트를 응답 페이지에 담아 전송함으로써 발생한다.
  • 공격용 스크립트가 대상 웹사이트에 있지 않고 다른 매체 (사이트, 이메일)에 포함될 수 있다.
  • 데이터베이스에 스크립트가 저장되지 않고 응답 페이지로 바로 클라이언트에 전달된다는 차이점이 있다.

 

3. Stored XSS 

  • 해커가 작성한 스크립트가 서버에 저장되고 , 해당 페이지를 접근하면 다른 사용자가 그 스크립트를 호출하게하는 방법이다.
  • 예를 들면 악의적인 스크립트를 작성하여 게시물로 등록하고, 다른 사용자가 해당 게시물로 들어왔을 때 해당 스크립트가 실행되게할 수 있다.

 

이미지 태그에 onerror라는 속성에 악성 스크립트를 심어두면 이미지가 없을 경우 해당 스크립트가 실행되게할 수 있다.

<img onerror="alert(document.cookie"> 세션 정보를 훔쳐가거나 할 수 있음.

 

4. XSS 공격 방지

4.1 XSS 취약점이 있는 innerHTML 사용을 자제한다.

  • HTML5에서 innerHtml을 통해 주입한 스크립트는 실행되지 않는다.
  • textContent, innerText를 사용해서 사용자 데이터를 출력하면 스크립트가 실행되지 않는다.

 

4.2 html입력이 가능한 경우 서버단에서 치환 처리

 

4.3 vue.js에서 v-html 같은 경우는 보안 취약점이 발생할 수 있다. 신뢰할 수 있는 컨텐츠에서만 HTML 사용

 

4.4 쿠키에 HttpOnly 옵션 활성화

  • 스크립트를 통해서 쿠키 접근 불가
  • 악의적인 클라이언트가 쿠키에 저장된 정보(세션 ID, 토큰)에 접근하는 것을 차단한다.
  • LocalStorage에 세션ID와 같은 민감한 정보를 저장하지 않는다.

 

4.5 XSS 특수 문자를 치환한다.

from & < > " ' /
to &amp; &lt; &gt; &quot; &#x27; &#x2F;
  • Spring에서는 오픈소스인 Lucy XSS Servlet Filter 사용
  • @RequestBody에 전달되는 JSON 요청에 대해서는 처리해주지 않음.

 

REFERENCE

https://www.youtube.com/watch?v=bSGqBoZd8WM&t=388s 

https://4rgos.tistory.com/1

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기