XSS
는 Cross Site Scripting
, 즉 사이트 간 스트립팅이라는 이름의 웹 취약점이다.SQL Injection
과 함께 웹 취약점 중 가장 기초적인 취약점으로 알려져 있지만 워낙 공격패턴이 다양하고 변화가 많이 이루어지기 때문에 사실상 완벽한 방어가 힘들고 지금까지도 굉장히 위험한 취약점 중 하나이다.XSS로 발생할 수 있는 피해는 다음과 같다.
XSS
에 취약한 웹 게시판 등에 쿠키나 세션 정보를 탈취하는 스크립트를 삽입하여 해당 게시글을 열람하는 유저들의 쿠키 및 세션 정보를 탈취할 수 있으며 이는 공격자가 탈취한 정보를 바탕으로 인증을 회피하거나 특정 정보를 열람할 수 있는 권한을 가지게 해준다.XSS
자체는 악성 프로그램을 다운로드 시킬 수 없지만 스크립트를 통해 악성 프로그램을 다운받는 사이트로 리다이렉트 시켜서 악성 프로그램을 다운받도록 유도할 수 있다.XSS
를 이용해 <img>
태그 등을 삽입하여 원본 페이지와는 전혀 관련 없는 페이지를 노출시키거나 페이지 자체에 수정을 가해 노출된 정보를 악의적으로 편집할 수 있다.공격시에는 아래와 같은 구문들을 공격 목적에 맞게 작성하여 게시판, 쪽지, 메일 등의 기능을 통해 업로드한다.
<script>alert("hi")</script>
가장 기본적인 구문으로 대놓고 script
태그를 넣어 alert를 실행시키는 구문이다.
이 구문이 실행된다면 해당 사이트는 XSS
에 대한 대책이 전혀 없는 것이라 봐도 무방하다.
<scr<script>ipt>alert("hi");</scr</script>ipt>
<script>
태그를 일차적으로 필터링하는 것을 우회하기 위한 구문이다.
중첩된 script
태그가 필터링되면 갈라져있던 script
태그가 결합되면서 구문이 실행된다.
<a onmouseover="alert('hi')">
a
태그를 이용한 공격이다. onmouseover
이벤트를 통해 공격을 실행한다.
<img src=# onerror="alert('hi')">
img
태그를 이용한 공격이다.
고의적으로 없는 src 주소를 지정하고 onerror
이벤트를 통해 공격을 실행한다.
<ruby onmouseover="alert('hi')"></ruby>
잘 사용되지 않는 태그를 이용한 공격이다. 해당 태그가 필터에서 누락된 경우 공격을 실행할 수 있다.
기본적인 대응 방법은 아래와 같다.
HTML
태그 사용을 허용해야 할 경우 화이트리스트를 만들어 특정 태그 입력만 허용XSS
에 대응하는 방법은 이 외에도 여러가지가 있으나 XSS
는 공격패턴이 다양하고 변화무쌍하기 때문에 완벽하게 방어하기는 힘들다. 꾸준한 감시와 관리가 받쳐주지 않는다면 누구도 XSS
에서 안전할 수 없다.