DOM Based XSS 대응 방안
- 해당 문서에서는 DOM Based XSS 대응 방안에 대해 기술합니다.
공격 방법
- DOM 페이지에 스크립트를 입력을 통한 공격 방법입니다.
- 임의의 DOM 페이지를 생성하여 공격 방법에 대해 설명하겠습니다.
- URL 주소에 해시 (#) 값이 존재하면 서버로 해시 값 경로에 위치한 페이지를 요청합니다.
- 해시 값이 변경될 때마다 서버에게 특정 페이지를 요청합니다.
- URL에 스크립트 코드를 작성합니다.
# 스크립트 예시
https://{호스트}:{포트}/#javascript:function a() {setTimeout(function () {alert('안녕')}, 1000)}; a();
-> 1초 후 alert로 "안녕"이라는 문구를 띄우는 스크립트
- 이와 같이 URL에 스크립트가 포함되어 스크립트가 실행되며 alert 창이 발생합니다.
방어 방법
- DOM Based XSS의 방어 방법에 대한 내용입니다.
1) 정적 템플릿 사용
- XSS 공격에 대한 방어를 위해 가능하면 정적 템플릿 엔진을 사용하여 동적으로 생성되는 HTML을 최소화합니다.
2) 사용자 입력의 적절한 검증 및 이스케이프
- 사용자로부터 받은 입력 값을 검증하여 이스케이프 과정을 거쳐야 합니다.
- HTML 특수 문자를 이스케이프하여 사용자 입력이 HTML 태그로 해석되지 않도록 처리해야 합니다.
3) CSP (Content Security Policy) 설정
- CSP를 사용하여 허용된 리소스 및 스크립트의 소스를 명시적으로 정의할 수 있습니다.
- 특히,
script-src
지시어를 사용하여 허용된 스크립트 출처를 제한할 수 있습니다.
소스코드
Reference
https://junhyunny.github.io/information/security/dom-based-cross-site-scripting/