크로스 사이트 스크립팅(XSS): 웹 보안 위협과 대응 전략
🔹 크로스 사이트 스크립팅(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, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
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 공격을 차단할 수 있습니다.
✅ 개발자는 보안 모범 사례를 준수하고, 보안 취약점을 지속적으로 점검해야 합니다.