IT이야기/보안

크로스 사이트 스크립팅(XSS): 웹 보안 위협과 대응 전략

Chiba-in 2025. 3. 1. 16:45

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

1. XSS(Cross-Site Scripting)의 정의

크로스 사이트 스크립팅(XSS)웹 애플리케이션의 취약점을 악용하여 악성 스크립트를 삽입하고 실행하는 사이버 공격 기법입니다. 공격자는 피해자의 브라우저에서 악성 스크립트를 실행시켜 개인 정보 탈취, 세션 하이재킹, 피싱 사이트 유도 등의 공격을 수행할 수 있습니다.

XSS의 주요 특징:

  • 웹사이트의 취약점을 이용하여 악성 스크립트를 실행
  • 사용자의 세션 쿠키 및 로그인 정보 탈취 가능
  • 악성코드 배포 및 피싱 공격 수행 가능
  • SNS, 전자상거래, 온라인 포털 등 다양한 웹 애플리케이션에서 발생 가능

📌 XSS 공격은 브라우저에서 실행되는 만큼, 클라이언트 측 보안도 중요합니다.


🔹 XSS 공격의 주요 유형

1. 반사형 XSS(Reflected XSS)

사용자가 입력한 데이터를 즉시 응답으로 반환하는 웹 애플리케이션의 취약점을 이용하는 공격

✔️ 반사형 XSS의 특징:

  • 공격자가 악성 링크를 생성하여 사용자가 클릭하도록 유도
  • URL 매개변수를 통해 스크립트를 실행
  • 로그인 정보 탈취 및 악성 사이트로 리디렉션 가능

✔️ 반사형 XSS 공격 예제:

<a href="http://example.com/search?q=<script>alert('XSS');</script>">Click Me</a>

📌 사용자가 악성 링크를 클릭하면 브라우저에서 스크립트가 실행됩니다.

2. 저장형 XSS(Stored XSS)

웹사이트의 데이터베이스에 악성 스크립트를 저장하고, 피해자가 페이지를 방문할 때 실행되는 공격

✔️ 저장형 XSS의 특징:

  • 웹사이트의 댓글, 게시판, 리뷰 시스템 등에 악성 코드 삽입
  • 여러 사용자에게 지속적으로 영향을 미칠 수 있음
  • SNS, 전자상거래 사이트 등에서 많이 발생

✔️ 저장형 XSS 공격 예제:

<input type="text" name="comment" value="<script>alert('XSS');</script>">

📌 저장형 XSS는 다수의 사용자를 대상으로 공격이 가능하므로 더욱 위험합니다.

3. DOM 기반 XSS(DOM-Based XSS)

브라우저에서 실행되는 JavaScript의 DOM(Document Object Model) 조작을 이용하는 공격

✔️ DOM 기반 XSS의 특징:

  • 서버와의 통신 없이 클라이언트 측에서 실행됨
  • document.write(), innerHTML 등의 취약한 코드 사용 시 발생
  • 탐지가 어려우며, 최신 웹 애플리케이션에서도 발견될 수 있음

✔️ DOM 기반 XSS 공격 예제:

var search = document.location.hash.substring(1);
document.getElementById("output").innerHTML = search;

📌 사용자가 http://example.com/#<script>alert('XSS')</script> 같은 URL을 입력하면 스크립트가 실행됩니다.


🔹 XSS 공격을 방어하는 방법

1. 입력값 검증(Input Validation) 적용

사용자로부터 입력받은 값이 악성 스크립트인지 확인하고 필터링해야 합니다.

✔️ 입력값 검증 방법:

  • 화이트리스트 기반 검증: 허용된 문자만 입력 가능하도록 설정
  • 특수 문자 필터링: <, >, ', ", &, () 등의 문자 인코딩 적용
  • 정규 표현식 사용: 예상하지 않은 스크립트 입력을 차단

📌 웹 애플리케이션은 모든 입력값을 철저히 검증해야 합니다.

2. 출력값 이스케이프(Escape Output) 적용

HTML, JavaScript, URL, CSS 등에서 안전한 방식으로 출력을 변환해야 합니다.

✔️ 출력값 이스케이프 예제 (JavaScript):

function escapeHTML(str) {
    return str.replace(/&/g, "&amp;")
              .replace(/</g, "&lt;")
              .replace(/>/g, "&gt;")
              .replace(/"/g, "&quot;")
              .replace(/'/g, "&#039;");
}
document.getElementById("output").innerHTML = escapeHTML(userInput);

📌 사용자가 입력한 데이터를 그대로 출력하지 않도록 조치해야 합니다.

3. 보안 HTTP 헤더 설정

웹 브라우저에서 XSS 공격을 방어하기 위해 보안 HTTP 헤더를 적용해야 합니다.

✔️ 추천 보안 헤더 설정:

  • Content-Security-Policy (CSP): 신뢰할 수 없는 스크립트 실행 방지
  • X-XSS-Protection: 브라우저의 XSS 필터 활성화
  • X-Content-Type-Options: MIME 스니핑 공격 방지

📌 보안 헤더를 설정하면 웹 브라우저에서 XSS 공격을 차단할 수 있습니다.

4. 웹 애플리케이션 방화벽(WAF) 활용

웹 애플리케이션 방화벽(WAF)은 XSS 패턴을 분석하고 차단하는 역할을 합니다.

✔️ 대표적인 WAF 솔루션:

  • ModSecurity (오픈소스 WAF)
  • Cloudflare WAF, AWS WAF 등 클라우드 기반 보안 솔루션

📌 WAF를 적용하면 웹 애플리케이션 보안이 한층 강화됩니다.


📌 결론

크로스 사이트 스크립팅(XSS)은 웹 애플리케이션의 취약점을 악용하여 사용자 데이터를 탈취하는 위험한 공격입니다.
입력값 검증, 출력값 이스케이프, 보안 HTTP 헤더 설정 등 다양한 보안 조치를 적용해야 합니다.
웹 애플리케이션 방화벽(WAF)을 활용하여 실시간으로 XSS 공격을 차단할 수 있습니다.
개발자는 보안 모범 사례를 준수하고, 보안 취약점을 지속적으로 점검해야 합니다.