XSS (Cross Site Scripting)
- 서버의 응답에 공격자의 스크립트가 포함돼, 응답을 받은 사용자의 브라우저에서 악성 스크립트가 실행되는 취약점
- 쿠키 혹은 세션을 탈취해 사용자의 권한을 얻는다.
- 사용자의 페이지를 변조한다.
- Stored XSS, Reflected XSS
XSS의 수행 조건
- 입력 데이터에 대한 검증이 부실해야 한다.
- 서버의 응답을 브라우저가 페이지에 출력할 때, 검증이 부실해야 한다.
Stored XSS
- 악성 스크립트가 서버의 데이터베이스, 파일 등에 저장된 후, 사용자의 요청에 지속적으로 노출된다.
ex) 게시판에 악성 스크립트를 삽입해 글을 작성하고, 사용자가 글을 조회할 때 스크립트가 실행된다.
Reflected XSS
- 악성 스크립트가 사용자의 요청과 함께 전송되고, 요청 데이터가 서버의 응답에 포함돼 악성 스크립트가 실행되는 취약점
- 요청 데이터에 의해 취약점이 발생하기에 변조된 데이터를 요청하도록 유도해야한다.
=> click jacking, open redirect 등의 취약점과 함께 사용될 때가 많다.
ex) 악성 스크립트를 url에 담아 공유
방어책 (완화책)
- 입력값 필터링
- HTTPOnly flag
서버 측에서 응답 헤더에 Set-Cookie 헤더를 전송할 때, HTTPOnly flag를 설정하여
자바스크립트가 해당 쿠키에 접근하지 못하도록 한다.
세션 하이재킹의 취약점을 덜어주기 때문에 세션 쿠키를 저장할 때 권장된다.
- Content Security Policy(CSP)
사이트가 불러오는 리소스의 출처를 제한해, 외부의 악성 스크립트를 실행하거나, 직접 악성스크립트를 작성하는 행위를 방지한다.
- X-XSS-Protection Header
응답 헤더에 설정해, 웹 브라우저의 XSS 필터를 활성화 시킨다.
참조 및 실습)
드림핵 > 웹 해킹 > 3강. Client-side Basic
해커들의 놀이터, Dreamhack
해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향
dreamhack.io