본문 바로가기
IT 정보/용어

XSS란? 크로스 사이트 스크립팅, 웹 보안의 첫걸음

by 희품 2025. 11. 5.
반응형

XSS란? 크로스 사이트 스크립팅, 웹 보안의 첫걸음 썸네일 이미지

우리는 매일 수많은 웹사이트를 방문하고, 게시판에 글을 쓰고, 댓글을 남기며 다른 사람들과 소통한다. 지극히 평범해 보이는 이 공간에, 사실은 보이지 않는 위험이 도사리고 있다면 어떨까? 내가 무심코 클릭한 게시글, 혹은 신뢰했던 웹사이트 자체가 나를 공격하는 통로가 될 수 있다는 사실을 아는 사람은 많지 않다. 이 모든 것을 가능하게 하는 주범이 바로 '크로스 사이트 스크립팅(Cross-Site Scripting, XSS)' 공격이다.

웹 보안을 위협하는 가장 오래되고 강력한 공격 중 하나인 XSS에 대해 알아보자.

 

크로스 사이트 스크립팅(XSS)이란?

인터넷 쿠키 정책 수락 또는 거부를 선택하면서 랩톱을 사용. 고객 브라우저가 사용자 데이터를 수집하여 재판매하거나 마케팅 목적으로 사용할 수 있도록 하는 웹 데이터 개인 정보 보호 개념.

크로스 사이트 스크립팅, 줄여서 XSS는 공격자가 웹사이트에 악의적인 스크립트를 삽입하여, 해당 웹사이트를 방문하는 다른 사용자의 웹 브라우저에서 그 스크립트가 실행되도록 만드는 공격 기법이다. 이름에 '크로스 사이트(Cross-Site)'가 붙은 이유는, 공격이 하나의 사이트에서 끝나지 않고 사용자의 브라우저를 통해 다른 사이트와의 상호작용(예: 쿠키 정보 전송)까지 영향을 미칠 수 있기 때문이다.

 

쉽게 비유하자면, 웹사이트의 게시판을 '공용 낙서장'이라고 생각해 보자. 대부분의 사람들은 이곳에 그림을 그리거나 글을 남긴다. 하지만 악의를 가진 누군가가 이 낙서장에 '이 글을 보면 옆 사람의 지갑을 훔쳐라'라는 보이지 않는 특수 잉크로 명령을 적어두는 것이다. 다른 사람들이 무심코 이 낙서를 볼 때마다, 자신도 모르게 그 명령을 수행하게 되는 셈이다. 여기서 '특수 잉크로 적은 명령'이 바로 악성 스크립트이고, '명령을 수행하는 행위'가 바로 XSS 공격으로 인한 피해이다.

 

 

XSS 공격은 어떻게 이루어질까?

XSS 공격은 크게 두 가지 유형으로 나눌 수 있다. 공격 방식에 따라 그 위험성과 파급력이 달라지는데, 대표적인 유형은 무엇일까?

디자인 프로토타입 - ux 디자인 프로토타이핑 소프트웨어를 사용하여 모바일 앱 또는 웹사이트 페이지의 와이어프레임을 만드는 컴퓨터 화면. 파란색 배경과 세미 플랫 벡터 일러스트

  • 저장형 XSS (Stored XSS) : 이름 그대로 악성 스크립트가 웹사이트의 데이터베이스에 '저장'되어 불특정 다수를 공격하는 방식이다. 공격자가 게시판, 댓글, 사용자 프로필 등 데이터를 저장할 수 있는 곳에 악성 스크립트를 포함한 글을 작성하면, 해당 글을 읽는 모든 사용자의 브라우저에서 스크립트가 실행된다. 파급력이 가장 크고 위험한 유형이다.
  • 반사형 XSS (Reflected XSS) : 악성 스크립트가 데이터베이스에 저장되지 않고, 사용자가 클릭하는 URL을 통해 일회성으로 공격하는 방식이다. 공격자는 이메일이나 메신저를 통해 악성 스크립트가 포함된 URL을 사용자에게 전달하고, 사용자가 이 링크를 클릭하면 해당 스크립트가 서버로 전송되었다가 사용자에게 그대로 '반사'되어 브라우저에서 실행된다. 특정 대상을 노리는 피싱 공격에 주로 사용된다.

 

XSS 공격이 치명적인 이유는?

단순히 스크립트가 실행되는 것뿐인데 이게 왜 그렇게 위험할까? 공격자는 XSS를 통해 사용자의 권한으로 할 수 있는 거의 모든 것을 흉내 낼 수 있기 때문이다. 그 구체적인 피해 유형을 살펴보자.

세션 하이재킹 아이콘 벡터 일러스트 개요

  • 세션 하이재킹(Session Hijacking): 사용자의 로그인 정보(세션 쿠키)를 탈취하여 해당 사용자인 것처럼 위장하고 시스템에 접속한다. 공격자가 당신의 계정으로 로그인하여 글을 쓰거나 개인정보를 열람할 수 있다.
  • 개인정보 유출: 사용자의 키보드 입력을 가로채거나(키로깅), 화면에 가짜 로그인 창을 띄워 아이디와 비밀번호 같은 민감한 정보를 빼돌린다.
  • 악성코드 유포: 웹사이트를 악성코드를 다운로드하는 경로로 만들어 방문자들을 감염시킨다.
  • 웹사이트 변조: 웹사이트의 내용이나 디자인을 임의로 변경하여 기업의 신뢰도를 떨어뜨리고 사용자에게 혼란을 준다.

 

XSS 공격은 어떻게 막을 수 있을까?

XSS 공격을 막기 위한 노력은 개발자와 사용자 모두에게 필요하다.

크로스 사이트 스크립팅(XSS) 다중 스타일 아이콘 세트

개발자의 대응 방안

개발자는 사용자가 입력하는 모든 데이터는 잠재적인 위협이라고 가정해야 한다. 사용자가 입력한 값에 포함된 특수문자나 스크립트 태그가 웹페이지에서 명령으로 인식되지 않도록 처리하는 것이 핵심이다.

  • 입력값 검증(Validation): 사용자가 입력한 데이터가 정해진 형식(이메일, 전화번호 등)에 맞는지 서버 측에서 철저히 검증한다.
  • 출력값 이스케이핑(Escaping): <, >, ", ' 등 HTML에서 특별한 의미를 갖는 문자들을 웹 브라우저가 해석할 수 없는 다른 문자(HTML Entity)로 변환하여 출력한다. 예를 들어 <script>&lt;script&gt;로 변환하면 브라우저는 이를 명령어로 인식하지 않고 일반 텍스트로 화면에 보여준다.

사용자의 예방 수칙

사실 특정 웹사이트에서 개발자가 XSS 공격에 대비한 모든 조치를 취해놨다면, 사용자는 XSS 공격에 대한 걱정 없이 사용할 수 있다. 하지만 여기서 사용자가 XSS 공격을 예방하기 위한 방법은, 조치되지 않은 웹사이트, 혹은 피싱 사이트이다.

사용자 입장에서는 신뢰할 수 없는 링크를 클릭하지 않는 것이 가장 중요하다. 이메일이나 SNS를 통해 전달된 단축 URL이나 출처가 불분명한 링크는 항상 의심하고, 최신 버전의 웹 브라우저를 사용하여 내장된 보안 기능을 활성화하는 것이 좋다.

 


XSS for Cross-Site 스크립팅. 고전적인 체스판 위.

결론적으로, XSS는 웹이 존재하는 한 사라지기 어려운 고전적인 공격이다. 개발자는 항상 보안 코딩 원칙을 준수하고, 사용자는 기본적인 보안 수칙을 지키는 것만이 우리의 소중한 정보와 시스템을 안전하게 지키는 길이다.

궁금하신 내용이 있으면 댓글 남겨주세요. 꼬리말 이미지.

#XSS #크로스사이트스크립팅 #웹보안 #정보보안 #시큐어코딩 #웹개발 #해킹 #보안취약점 #개발자 #크로스사이트스크립트

반응형