본문 바로가기
INFORMATION SECURITY · FREE LEARNING정보보안 학습센터원리 → MASTER → 문제·복습 → MUST KNOW

글자를 표시할 것인가, 문법을 해석할 것인가 · 정보보안 사례

CASE STUDY · 방향 6 · 원문 사례

글자를 표시할 것인가, 문법을 해석할 것인가

위 예제의 입력에는 실행 스크립트가 없습니다. 그래도 데이터와 HTML 구조의 경계를 확인할 수 있습니다.

출처: 네 번째 발걸음 · 브라우저가 데이터를 코드로 읽지 않게 한다. 연결된 쪽은 해당 발걸음의 시작 쪽입니다.

원문 풀이 흐름과 깨달음 펼치기

함께 따라가기 · 글자를 표시할 것인가, 문법을 해석할 것인가

위 예제의 입력에는 실행 스크립트가 없습니다. 그래도 데이터와 HTML 구조의 경계를 확인할 수 있습니다.

  1. innerHTML에 넣으면 b 태그가 해석되어 글자가 굵게 보입니다. 이는 입력이 단순한 글자 대신 HTML 구조를 만들 수 있다는 뜻입니다. 공격 가능한 입력이 허용되면 이 경계가 더 큰 문제로 이어질 수 있습니다.

  2. 일반 div의 textContent에 넣으면 <b>라는 글자까지 그대로 보입니다. 먼저 HTML 이스케이프한 문자열을 또 넣는 것이 아니라 원래 문자열을 텍스트로 전달합니다. 스크립트나 스타일 요소의 내용에 같은 원리를 무조건 적용해서는 안 됩니다.

  3. 만약 사용자가 굵은 글씨 등 제한된 HTML을 정말 작성해야 한다면, 필요한 요소와 속성만 허용하는 검증된 정화 기능을 사용합니다. 정화 후 다시 위험하게 문자열을 합치면 효과가 사라질 수 있습니다.

깨달음화면에 보일 데이터와 브라우저가 실행·해석할 구조를 분리합니다. 필요한 기능이 단순 텍스트라면 HTML 해석을 허용할 이유가 없습니다.

© K-BOOKS · 무료 웹 열람용 콘텐츠입니다. 무단 복제·저장·인쇄·재배포를 제한합니다.


CONTINUE LEARNING

지금 공부한 흐름을 책으로 이어가세요

무료 학습은 그대로, 종이책은 필요한 분을 위한 선택지입니다.

정보보안 MUST KNOW전체 도서 12권