XSS
기술노트
💉 XSS (Cross-Site Scripting)
XSS는 공격자가 악의적인 자바스크립트(Script) 코드를 웹 사이트에 삽입(Injection)하여, 다른 사용자가 해당 페이지를 열었을 때 그 스크립트가 사용자(클라이언트)의 브라우저에서 실행되도록 만드는 공격 기법입니다. SQL 인젝션이 서버의 데이터베이스를 공격하는 것이라면, XSS는 사용자의 웹 브라우저를 공격하는 것입니다.
⚙️ XSS 공격의 종류
- 저장 XSS (Stored XSS) : 악성 스크립트가 웹 사이트의 데이터베이스나 파일에 '저장'되었다가, 사용자가 해당 데이터를 요청할 때마다 실행되는 가장 위험한 형태의 공격입니다. (예: 게시판의 글 내용에 악성 스크립트를 저장)
- 반사 XSS (Reflected XSS) : 악성 스크립트가 포함된 URL을 사용자가 클릭하도록 유도하여, 서버가 그 스크립트를 그대로 '반사'하여 사용자에게 응답할 때 실행되는 공격입니다. (예: `https://example.com?q=<script>alert('hacked')</script>`)
- DOM 기반 XSS (DOM-based XSS) : 서버와는 무관하게, 브라우저의 DOM(Document Object Model) 환경에서 자바스크립트가 동적으로 페이지를 조작할 때 발생하는 공격입니다.
🛡️ 방어 방법
XSS 공격을 막는 핵심 원칙은 사용자의 입력을 신뢰하지 않고, 항상 적절한 처리(Sanitization, Escaping)를 거쳐 출력하는 것입니다.
- HTML 특수문자 이스케이프 (Escaping) : 사용자가 입력한 값에 포함된 HTML 태그 관련 문자들(예: `<`, `>`, `"`, `'`)을, HTML에서 특별한 의미가 없는 문자열(예: `<`, `>`, `"`, `'`)로 변환하여 출력합니다. 이렇게 하면 악성 스크립트가 있더라도 단순한 텍스트로만 표시되고 실행되지 않습니다. **가장 기본적인 방어책입니다.**
- 보안 라이브러리 사용 : 대부분의 최신 웹 프레임워크(React, Vue, Angular 등)는 기본적으로 XSS 방어 기능을 내장하고 있습니다. 또한, `DOMPurify`와 같이 신뢰할 수 있는 라이브러리를 사용하여 HTML을 안전하게 처리할 수 있습니다.
- 콘텐츠 보안 정책 (CSP, Content Security Policy) : 신뢰할 수 있는 스크립트 소스만 실행되도록 브라우저에 정책을 명시하여, 예상치 못한 스크립트의 실행을 막는 강력한 방어 메커니즘입니다.
💡 정보처리기사 핵심 Point
- XSS 공격을 통해 공격자는 사용자의 쿠키나 세션 정보를 탈취(세션 하이재킹)하거나, 악성 사이트로 리디렉션시키거나, 페이지의 내용을 변조하는 등 다양한 악성 행위를 할 수 있습니다.
- 정보처리기사 시험에서는 XSS의 공격 원리, 종류(저장형, 반사형), 방어 방법(이스케이프, CSP)을 묻는 문제가 자주 출제됩니다.