stored xss, reflected xss

agnusdei·2024년 7월 26일

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

크로스 사이트 스크립팅(XSS)은 웹 애플리케이션에서 발생하는 보안 취약점으로, 공격자가 악성 스크립트를 삽입하여 다른 사용자가 이를 실행하도록 하는 공격 방식입니다. XSS는 크게 두 가지 유형으로 나뉩니다: 저장형 XSS와 반사형 XSS.

저장형 XSS (Stored XSS)

저장형 XSS는 공격자가 삽입한 악성 코드가 서버에 영구적으로 저장되는 경우를 말합니다. 예를 들어, 데이터베이스, 메시지 포럼, 방문자 로그 등에 악성 스크립트를 삽입하면, 해당 데이터를 읽는 모든 사용자가 이 스크립트를 실행하게 됩니다.

동작 원리 및 시나리오:

  1. 입력 저장: 공격자가 게시판에 글을 작성할 때, 글 내용에 <script>alert('XSS');</script>와 같은 악성 코드를 삽입합니다.
  2. 데이터 저장: 서버는 이 글을 데이터베이스에 저장합니다.
  3. 데이터 조회: 다른 사용자가 해당 글을 조회할 때, 삽입된 스크립트가 포함된 데이터를 서버로부터 받아 브라우저에 표시합니다.
  4. 스크립트 실행: 브라우저가 페이지를 렌더링하면서 악성 스크립트를 실행합니다.
  5. 결과: 스크립트가 실행되어 알림 창이 뜨거나, 사용자의 쿠키나 개인 정보가 탈취될 수 있습니다.

반사형 XSS (Reflected XSS)

반사형 XSS는 공격자가 제공한 악성 입력이 서버에 저장되지 않고, 즉각적으로 응답에 반영되는 경우를 말합니다. 주로 URL에 포함된 쿼리 매개변수를 통해 이루어집니다.

동작 원리 및 시나리오:

  1. URL 생성: 공격자가 악성 스크립트를 포함한 URL을 생성합니다. 예를 들어, 검색 기능이 있는 웹사이트의 URL이 http://example.com/search?q=검색어일 경우, 공격자는 다음과 같은 URL을 만들 수 있습니다:
    http://example.com/search?q=<script>alert('XSS');</script>
  2. 유도: 공격자는 이 URL을 피해자에게 이메일, 메시지, 소셜 미디어 등을 통해 전송합니다.
  3. 요청 및 응답: 피해자가 URL을 클릭하면, 웹 브라우저는 서버에 요청을 보냅니다: GET /search?q=<script>alert('XSS');</script>. 서버는 쿼리 매개변수 q의 값을 포함한 페이지를 생성하여 응답합니다.
    <html>
    <body>
      <h1>검색 결과</h1>
      <div>검색어: <script>alert('XSS');</script></div>
    </body>
    </html>
  4. 스크립트 실행: 피해자의 브라우저는 서버로부터 받은 HTML을 렌더링하면서, 포함된 <script>alert('XSS');</script> 스크립트를 실행합니다.
  5. 결과: 피해자의 브라우저에서 알림 창이 뜨거나, 악의적인 동작이 수행됩니다.

방지 방법

XSS 공격을 방지하기 위해서는 다음과 같은 보안 조치가 필요합니다:

  1. 입력값 검증: 서버는 클라이언트로부터 받은 모든 입력값을 철저히 검증해야 합니다.
  2. 출력값 인코딩: 사용자 입력을 HTML 페이지에 포함할 때, 모든 출력값을 적절히 인코딩하여 스크립트가 실행되지 않도록 해야 합니다.
  3. 보안 헤더 설정: Content Security Policy(CSP)와 같은 보안 헤더를 설정하여 브라우저가 허용된 소스에서만 스크립트를 실행하도록 제한할 수 있습니다.

저장형 XSS와 반사형 XSS는 모두 심각한 보안 위협을 초래할 수 있으므로, 웹 애플리케이션 개발 시에는 이러한 보안 취약점을 방지하기 위한 철저한 대책이 필요합니다.

profile
DevSecOps Pentest🚩

0개의 댓글