사용자가 입력한 문자열을 마크업으로 해석하지 않고 <p> 태그의 본문 텍스트로 그대로 표시하려 한다. XSS 방어를 위해 우선 적용할 처리로 가장 적절한 것은?
1
HTML 본문 컨텍스트에 맞게 엔터티 인코딩하거나 textContent 같은 안전한 출력 방식을 사용한다.
정답 근거HTML 본문에서는 <, >, &, 따옴표 등을 HTML 엔터티로 처리하거나 textContent를 사용해 입력을 코드가 아닌 텍스트로 렌더링해야 한다.
2
문자열 전체에 URL 퍼센트 인코딩만 적용한다.
오답 이유URL 인코딩은 URL 구성요소에 필요한 처리이며 HTML 본문 파서의 컨텍스트를 안전하게 만드는 대체 수단이 아니다.
3
JavaScript 문자열 이스케이프만 적용한 뒤 innerHTML에 넣는다.
오답 이유JavaScript 문자열용 이스케이프는 HTML 파싱 규칙과 다르고 innerHTML은 문자열을 마크업으로 해석하므로 안전하지 않다.
4
출력 인코딩 없이 Content-Security-Policy 헤더만 설정한다.
오답 이유CSP는 방어 심층화 수단이지만 컨텍스트별 출력 인코딩을 대신할 수 없고 설정 오류나 허용된 스크립트 경로에 영향을 받는다.
정답·상세해설
정답 1번
XSS 출력 방어는 데이터가 놓이는 파서 컨텍스트에 맞아야 한다. 이 문제는 HTML 태그 사이의 본문이므로 HTML 엔터티 인코딩 또는 텍스트 전용 안전한 sink가 우선이다. URL·JavaScript 컨텍스트의 인코딩을 대신 쓰거나 CSP만 의존하면 입력이 HTML 코드로 해석될 가능성이 남는다.