Web

XSS

XSS 점검 시 문맥별로 확인할 입력과 방어 포인트를 정리합니다.

빠른 확인

먼저 입력값이 어느 문맥에 출력되는지 확인한다. 같은 문자열도 HTML 본문, 속성, JavaScript 문자열, URL 문맥마다 필요한 검증 방식이 다르다.

<script>alert(1)</script>
"><script>alert(1)</script>

HTML 본문

<img src=x onerror=alert(1)>

태그가 그대로 렌더링되는지, HTML entity로 인코딩되는지 확인한다.

HTML 속성

" autofocus onfocus=alert(1) x="

따옴표 탈출 가능성과 이벤트 핸들러 삽입 가능성을 본다.

JavaScript 문자열

';alert(1);//

문자열 종료, escape 처리, template literal 문맥을 구분해서 확인한다.

URL 문맥

javascript:alert(1)

링크, 리다이렉트, 이미지 URL처럼 URL이 들어가는 위치에서 스킴 제한이 적용되는지 확인한다.

방어 메모

입력 필터링보다 출력 문맥별 인코딩을 우선한다. 사용자 HTML을 허용해야 한다면 sanitizer allowlist를 사용하고, CSP로 inline script 실행을 제한한다.