본문 바로가기

ETC

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

728x90
반응형

크로스 사이트 스크립트(Cross-Site Script, XSS)는 웹 애플리케이션에서 발생할 수 있는 보안 취약점 중 하나로, 악의적인 사용자가 웹 페이지에 악성 스크립트를 삽입해 다른 사용자에게 피해를 주는 공격 기법이다.

XSS 공격을 통해 공격자는 사용자의 세션을 탈취하거나, 사용자의 브라우저에서 악성 코드를 실행하고, 웹 애플리케이션의 신뢰를 손상시킬 수 있다.


XSS 공격의 동작 원리

XSS는 웹 페이지가 사용자로부터 받은 입력값을 적절하게 검증하지 않고 그대로 렌더링할 때 발생한다. 공격자는 웹 애플리케이션에 악성 스크립트를 삽입하고, 이 스크립트는 다른 사용자의 브라우저에서 실행된다. 악성 스크립트는 사용자의 세션 쿠키를 탈취하거나, 중요한 정보를 빼내고, 피싱 공격을 유도하는 등의 다양한 방식으로 악용될 수 있다.


XSS 공격 유형

XSS는 크게 세 가지 유형으로 나눌 수 있습니다.

  1. Stored XSS (저장형 XSS)
    • 공격자가 악성 스크립트를 웹 서버의 데이터베이스에 영구적으로 저장시켜 놓는 방식이다. 이후 다른 사용자가 해당 페이지를 요청할 때마다 저장된 악성 스크립트가 로드되고 실행된다. 주로 블로그, 게시판, 댓글, 사용자 프로필 등의 기능이 있는 웹 애플리케이션에서 발생한다.
    예시: 사용자가 댓글에 <script>alert('해킹됨');</script> 같은 악성 코드를 작성하면, 이 댓글을 보는 모든 사용자의 브라우저에서 스크립트가 실행된다.
  2. Reflected XSS (반사형 XSS)
    • 웹 애플리케이션이 입력값을 즉시 반환하는 경우 발생하는 XSS이다. 악성 스크립트는 서버에 저장되지 않고, 사용자가 클릭한 URL이나 입력값에 포함된 악성 코드가 서버에 반사되어 브라우저에서 실행된다.
    예시: 공격자는 링크를 생성하여 피해자가 클릭하게 유도한다.
    https://example.com/search?q=<script>alert('해킹됨');</script> 같은 URL을 피해자가 클릭하면, 검색 결과 페이지에서 악성 스크립트가 실행된다.
  3. DOM-based XSS (Document Object Model XSS)
    • 클라이언트 측 자바스크립트가 동적으로 DOM을 변경할 때 발생하는 XSS이다. 즉, 서버에서 전송된 데이터가 아닌, 클라이언트 측 DOM 조작을 통해 발생하는 취약점이다. 주로 클라이언트 쪽 자바스크립트 코드에서 발생하며, 서버가 개입하지 않기 때문에 서버 로그로는 탐지하기 어려운 경우가 많다.
    예시: URL에 포함된 악성 입력값이 클라이언트 측 자바스크립트에 의해 그대로 처리되어 악성 스크립트가 실행된다.

 

XSS의 피해

  • 세션 탈취: 공격자는 사용자의 세션 쿠키를 탈취해 사용자의 권한으로 웹 애플리케이션에 접근할 수 있다.
  • 피싱 공격: 사용자의 브라우저에 가짜 로그인 페이지 등을 표시해 사용자의 민감한 정보를 입력하도록 유도할 수 있다.
  • 브라우저 권한 조작: 악성 스크립트를 통해 피해자의 브라우저에서 다양한 악의적인 동작을 수행할 수 있다.
    예를 들어, 사용자의 동의 없이 브라우저 API에 접근할 수 있다.
  • 사이트 변조: XSS 공격을 통해 웹 페이지의 내용을 변조하거나 악성 코드가 포함된 링크를 삽입할 수 있다.

XSS 방지 방법

XSS 공격을 방지하기 위해서는 웹 애플리케이션이 사용자 입력을 처리하는 방식에서 보안 조치가 필수이다.

  1. 입력값 필터링:
    • 사용자가 입력한 값에 대해 필터링을 적용하여, HTML 태그나 자바스크립트 코드와 관련된 위험한 문자열을 제거해야 한다. 하지만 필터링만으로는 완벽하지 않으므로 다른 보안 조치와 함께 사용해야 한다.
  2. 출력 시 인코딩(Escaping):
    • 웹 페이지에서 사용자 입력을 출력할 때, 해당 값을 HTML 엔티티로 변환해 악성 스크립트가 실행되지 않도록 해야 한다. 예를 들어, <와 > 같은 문자를 &lt;와 &gt;로 인코딩한다.
  3. 콘텐츠 보안 정책(CSP, Content Security Policy) 사용:
    • CSP를 사용하여 브라우저가 허용된 스크립트만 실행하도록 제한할 수 있다. 이를 통해 외부에서 삽입된 스크립트나 인라인 스크립트의 실행을 막을 수 있다.
  4. HTTPOnly 플래그:
    • 세션 쿠키에 HTTPOnly 플래그를 설정하면, 자바스크립트를 통해 쿠키에 접근하는 것을 방지할 수 있다. 이는 세션 탈취를 예방하는 데 중요한 역할을 한다.
  5. 프레임워크 보안 기능 사용:
    • 대부분의 최신 웹 프레임워크(예: Django, Ruby on Rails)에서는 XSS 방지 기능을 기본적으로 제공하므로, 이러한 보안 기능을 적극적으로 활용하는 것이 좋다.
728x90
반응형

'ETC' 카테고리의 다른 글

jQuery란?  (1) 2024.10.06
데이터 분리보관 및 DB 마스킹  (0) 2024.10.03
SQL Injection 이란?  (1) 2024.10.01
양방향 암호화 & 단방향 암호화  (0) 2024.09.30
MSA (Micro Services Architecture)란?  (1) 2024.09.29