XSS(크로스 사이트 스크립팅, Cross-Site Scripting) 공격은 웹 애플리케이션의 보안 취약점을 이용하여 공격자가 악성 스크립트를 웹 페이지에 삽입하는 공격 방식이다.
이 삽입된 악성 스크립트는 웹 브라우저를 사용하는 사용자의 측면에서 실행되며, 이를 통해 공격자는 사용자의 세션 토큰을 탈취하거나, 사용자 인터페이스를 조작하거나, 사용자에게 가짜 내용을 표시하는 등 다양한 행위를 수행할 수 있다.
XSS 공격의 주요 유형
1 저장 XSS (Stored XSS):
공격자가 악성 스크립트를 웹 애플리케이션의 데이터베이스, 이벤트 로그, 댓글 영역 등에 영구적으로 저장한다.
다른 사용자가 해당 페이지를 조회할 때마다 악성 스크립트가 실행된다.
2 반사 XSS (Reflected XSS):
공격자가 URL의 쿼리 문자열이나 폼 데이터 등을 통해 악성 스크립트를 전달한다.
사용자가 이 악성 URL을 클릭하면, 웹 애플리케이션은 이 스크립트를 웹 페이지에 반영하게 되어 사용자의 브라우저에서 실행된다.
3 DOM 기반 XSS (DOM-based XSS):
웹 페이지의 DOM(Document Object Model)을 조작하여 공격이 발생한다.
웹 애플리케이션의 서버 측 코드가 아닌 클라이언트 측 스크립트에서 취약점이 발생하여, 악성 스크립트가 DOM을 조작하여 실행된다.
XSS 공격을 방지하기 위한 주요 방법
1 입력 검증: 사용자로부터의 입력을 신뢰하지 않고, 서버 측에서 모든 입력을 검증한다.
2 출력 인코딩: 사용자 입력을 웹 페이지에 직접 반영하기 전에 적절하게 인코딩하여 스크립트로 실행되지 않게 한다.
3 컨텐츠 보안 정책 (Content Security Policy, CSP): 웹 브라우저에게 특정 소스에서만 스크립트를 로드하도록 지시할 수 있는 보안 헤더다.