HTML 엔티티 변환 escape
HTML 특수문자를 엔티티로 escape 하거나 엔티티 문자열을 원래 문자로 되돌립니다. XSS 방지 확인에 사용합니다.
이 도구가 하는 일
HTML 문서에서 <, >, &, 따옴표는 마크업 구조를 나타내는 특별한 의미를 가집니다. 본문에 이런 문자를 그대로 넣으면 브라우저가 태그의 일부로 해석해 화면이 깨지거나, 더 심각하게는 사용자가 입력한 문자열이 실제 스크립트로 실행될 수 있습니다. 이것이 XSS 취약점의 기본 원리입니다.
엔티티 변환은 이런 문자를 < > & " 같은 대체 표기로 바꿔 브라우저가 마크업이 아닌 일반 텍스트로 표시하도록 만듭니다. 사용자 입력을 화면에 출력할 때 반드시 거쳐야 하는 과정이며, PHP의 htmlspecialchars, JavaScript의 textContent 사용이 같은 목적을 수행합니다.
이 도구는 반대 방향 변환도 지원합니다. 크롤링한 데이터나 XML 응답, RSS 피드에 엔티티가 남아 있어 &quot; 처럼 이중으로 인코딩된 값을 만났을 때 원문을 확인하는 데 사용할 수 있습니다.
언제 사용하나요
게시판이나 댓글 기능에서 사용자 입력이 제대로 escape 되는지 확인할 때, 크롤링한 HTML에서 추출한 텍스트에 남은 엔티티를 정리할 때, 이메일 템플릿이나 XML 문서에 특수문자가 포함된 값을 넣기 전에 변환할 때, 로그에 <script> 같은 값이 찍혔을 때 실제 입력이 무엇이었는지 확인할 때 사용합니다.
입력과 출력 예시
<a href="x">A & B</a>
<a href="x">A &amp; B</a>
태그 기호와 따옴표, 앰퍼샌드가 모두 엔티티로 바뀌어 텍스트로만 표시됩니다.
<strong>굵게</strong>
<strong>굵게</strong>
디코딩 방향. 크롤링 데이터에서 원문 마크업을 확인할 때 사용합니다.
주의사항
엔티티 변환은 HTML 본문에 값을 넣을 때의 방어책입니다. 값이 들어가는 위치가 태그 속성, JavaScript 코드 안, URL 파라미터라면 각 위치에 맞는 별도의 escape 규칙이 필요합니다. 이 도구로 변환했다고 해서 모든 XSS가 막히는 것은 아닙니다. 또한 이미 escape 된 문자열을 다시 변환하면 &lt; 처럼 이중 인코딩되어 화면에 < 가 그대로 보이게 됩니다.
자주 묻는 질문
escape만 하면 XSS가 완전히 막히나요?
값이 HTML 본문에 들어가는 경우에는 효과적이지만, 태그 속성이나 JavaScript 문자열 안에 들어가는 경우에는 별도의 규칙이 필요합니다. 출력 위치에 맞는 처리를 해야 합니다.
화면에 < 가 그대로 보입니다.
이중 escape 된 경우입니다. 이미 변환된 값을 한 번 더 변환하면 & 가 &amp; 로 바뀌면서 이런 현상이 생깁니다. 변환 지점이 중복되지 않는지 확인하십시오.