핵심 가이드
인코딩 및 디코딩 워크플로 가이드
Base64, URL 인코딩, HTML 엔티티, Unicode 이스케이프를 언제 쓰고 각각 무엇을 보호하는지 설명합니다.
인코딩은 하나의 작업이 아닙니다. 전송, 임베딩, 표시, 저장에 맞게 내용을 안전하게 바꾸는 문맥별 변환들의 집합입니다. 이 문맥을 혼동하면 깨진 URL, 읽을 수 없는 텍스트, UI에 그대로 노출되는 이스케이프 문자열이 쉽게 생깁니다.
경계에 맞는 인코딩 선택하기
내용이 쿼리 문자열이나 경로 세그먼트가 될 때는 URL 인코딩을 사용합니다. 사용자가 보는 텍스트를 마크업에 넣고 꺾쇠괄호 같은 문자를 안전하게 표시해야 할 때는 HTML 엔티티를 사용합니다. 문자열이 소스 코드나 직렬화된 표현을 지나야 할 때는 Unicode 이스케이프를 쓰고, 바이너리나 일반 텍스트 payload에 텍스트 안전한 포장이 필요할 때 Base64를 사용합니다.
가장 흔한 실패 패턴
대표적인 버그는 이중 인코딩입니다. 이미 URL용으로 이스케이프된 값이 다시 이스케이프되어 downstream 서비스가 망가진 값을 받습니다. 또 다른 흔한 실수는 Base64를 암호화로 보는 것입니다. Base64는 되돌릴 수 있는 인코딩이므로 비밀을 숨기는 데 쓰면 안 됩니다. 또한 Base64는 payload 크기를 대략 3분의 1 늘리기 때문에 큰 인라인 자산에서는 중요합니다.
- 가능한 한 이른 시점이 아니라 출력에 가장 가까운 경계에서 인코딩합니다.
- 어디서 값이 망가지기 시작했는지 볼 수 있도록 디버깅용 원본 문자열을 하나 남깁니다.
- 별도로 암호화되지 않은 인코딩된 비밀값은 노출된 것으로 취급합니다.
브라우저에서 확인하기 쉬운 디버깅 루틴
결과를 신뢰하기 전에 샘플을 사람이 읽을 수 있는 형태로 다시 디코딩합니다. 인코딩된 값과 디코딩된 값을 나란히 비교하세요. 텍스트가 나중에 HTML에 들어가거나 URL에 붙여넣어질 예정이라면, 디코딩에 성공했다는 이유만으로 모든 곳에서 안전하다고 보지 말고 실제 목적지 문맥에서 확인합니다.
관련 읽을거리
가이드와 워크플로
관련 도구
도구 라이브러리