같은 사용자 입력이라도 출력 위치에 따라 필요한 인코딩이 다르다. 다음 조건에서 XSS를 줄이기 위한 출력 처리와 보조 방어를 서술하시오.
| 구분 | 출력 위치 |
|---|---|
| A | HTML 본문 |
| B | HTML 속성 |
| C | URL |
| D | JavaScript 문자열 |
| E | 제한된 서식 HTML을 허용하는 본문 |
모범답안
사용자 입력은 출력되는 HTML·속성·URL·JavaScript 문맥에 맞는 인코딩을 적용한다. 제한된 HTML을 허용할 때는 허용 목록 기반 HTML sanitizer로 위험 태그와 속성을 제거하며, CSP를 추가 방어 계층으로 적용한다.
풀이와 판단 근거
XSS 방어의 중심은 입력을 어디에 출력하는지에 맞는 문맥별 인코딩이다. HTML 본문 인코딩을 JavaScript 문자열이나 URL에 그대로 적용하면 우회될 수 있다.
서식 HTML 자체를 허용해야 하면 단순 인코딩 대신 검증된 sanitizer로 허용된 요소만 남겨야 하며, Content-Security-Policy는 인라인 스크립트 실행 범위를 줄이는 보조 수단이지 인코딩을 대체하지 않는다.
자주 틀리는 지점
- 모든 문맥에 같은 HTML 이스케이프만 적용
- 금지 목록 정규식만으로 HTML을 정화
- CSP만 설정하면 출력 인코딩이 필요 없다고 판단
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.