HTML에서 어떤 문자를 이스케이프해야합니까?


251

XML과 동일하거나 공백을 더한 것  입니까 ( )?

HTML 이스케이프 문자의 거대한 목록을 찾았지만 이스케이프 해야 한다고 생각하지 않습니다 . 탈출 해야 할 것이 무엇인지 알고 싶습니다 .

답변:


318

텍스트 내용이 예상되는 위치에 문서의 텍스트 내용을 삽입하는 경우 1을 , 당신은 일반적으로 단지 당신이 XML에서와 같은 문자를 이스케이프해야합니다 . 요소 내부에는 엔티티 이스케이프 앰퍼샌드 &와 요소 구분 기호가보다 작거나 큰 부호 만 포함됩니다 < >.

& becomes &amp;
< becomes &lt;
> becomes &gt;

속성 값 안에서도 사용중인 따옴표를 이스케이프해야합니다.

" becomes &quot;
' becomes &#39;

경우에 따라 이러한 문자 중 일부를 빠져 나가는 것이 안전 할 수 있지만 실수를 할 가능성을 줄이기 위해 모든 경우에 5 가지를 모두 피하는 것이 좋습니다.

ASCII로 인코딩 된 문서에서 이모지를 사용하려는 경우와 같이 문서 인코딩이 사용중인 모든 문자를 지원하지 않는 경우 해당 문자를 이스케이프해야합니다. 요즘 대부분의 문서는 이것이 필요하지 않은 완전 유니 코드 지원 UTF-8 인코딩을 사용하여 인코딩됩니다.

일반적으로 공백을로 탈출해서는 안됩니다 &nbsp;. &nbsp;일반 공간이 아니며 비 공백 공간 입니다. 두 단어 사이에 줄 바꿈이 삽입되는 것을 방지하거나 자동으로 축소되지 않고 여분의 공백을 삽입하기 위해 일반 공백 대신이 공백을 사용할 수 있지만 일반적으로 드문 경우입니다. 필요한 디자인 제약 조건이 없으면이 작업을 수행하지 마십시오.


1 "텍스트 내용이 예상되는 위치"는 일반적인 구문 분석 규칙이 적용되는 요소 또는 인용 된 속성 값 내부를 의미합니다. 예를 들면 다음 <p>HERE</p>과 같습니다. 또는 <p title="HERE">...</p>. 위에서 쓴 내용은 스크립트 또는 스타일 태그 내부 또는 요소 또는 속성 이름과 같은 특수 구문 분석 규칙이나 의미가있는 콘텐츠 에는 적용되지 않습니다 . 예를 들면 : <NOT-HERE>...</NOT-HERE>, <script>NOT-HERE</script>, <style>NOT-HERE</script>, 또는 <p NOT-HERE="...">...</p>.

이러한 맥락에서 규칙은 더 복잡하고 보안 취약점을 도입하는 것이 훨씬 쉽습니다. 이러한 위치에 동적 콘텐츠를 삽입하지 않는 것이 좋습니다. 유능한 보안 인식 개발자 팀이 이러한 값을 올바르게 인코딩했지만 경계가없는 것으로 가정하여 취약점을 도입하는 것을 보았습니다. 일반적으로 동적 값을 속성에 넣은 다음 JavaScript로 처리하는 등의 안전한 대안이 있습니다.

필요한 경우 Open Web Application Security Project의 XSS 예방 규칙 을 읽고 염두에 두어야 할 몇 가지 문제를 이해하십시오.


2
일부 HTML 속성 값은 특별한 의미 (JS / CSS)를 가질 수도 있습니다. 따라서 이것에는 적용되지 않습니다 (예 : <p onclick="NOT-HERE">...</p>및) <p style="NOT-HERE">...</p>.
geekley


9

기본적으로 HTML 및 XML 파일에는 항상 이스케이프되어야하는 세 가지 주요 문자 가 있으므로 나머지 마크 업과 상호 작용하지 않으므로 예상대로 두 개는 구문 래퍼가됩니다. < > 아래에 나열되어 있습니다.

 1)  &lt; (<)
    
 2)  &gt; (>)
    
 3)  &amp; (&)

또한 큰 따옴표 ( ")를"로 사용하고 작은 따옴표 ( ')를 & apos로 사용할 수 있습니다.

<script>및 에 동적 콘텐츠를 넣지 마십시오 <style>.이 규칙은 적용되지 않습니다. 예를 들어에 JSON을 포함해야하는 경우 <를 \ x3c로 바꾸고 U + 2028 문자를 \ u2028로 바꾸고 U + 2029를 \ u2029로 바꾸십시오 (JSON 직렬화 후).

HTML 이스케이프 문자 : 전체 목록 : http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

따라서 문자 참조를 시작할 수있는 뒤에 <또는 &를 이스케이프해야합니다. 또한 앰퍼샌드에 대한 규칙은 인용 된 속성에 대한 유일한 규칙입니다. 일치하는 인용 부호가 유일한 따옴표이기 때문입니다. 그러나 속성 값을 종료하지 않으려면 따옴표를 이스케이프하십시오.

UTF-8로 변경하면 파일을 다시 저장할 수 있습니다.

페이지에 문자 인코딩 UTF-8을 사용하면 대부분의 이스케이프를 피하고 문자로 작업 할 수 있습니다. 그러나 문서의 인코딩을 변경하기 위해서는 페이지 상단이나 서버에서 인코딩 선언을 변경하는 것만으로는 충분하지 않습니다. 해당 인코딩으로 문서를 다시 저장해야합니다. 응용 프로그램으로이를 수행하는 방법을 이해하려면 웹 제작 응용 프로그램에서 인코딩 설정을 참조하십시오.

보이지 않거나 모호한 문자 :

이스케이프에 특히 유용한 역할은 프레젠테이션에서 보이지 않거나 모호한 문자를 나타내는 것입니다.

한 예로 유니 코드 문자 U + 200F RIGHT-TO-LEFT MARK가 있습니다. 이 문자는 양방향 텍스트에서 방향성을 명확하게하는 데 사용될 수 있습니다 (예 : 아랍어 또는 히브리어 스크립트를 사용하는 경우). 그러나 그래픽 형식이 없으므로 이러한 문자가 텍스트에서 어디에 있는지 확인하기 어렵고, 분실하거나 잊어 버린 경우 나중에 편집하는 동안 예기치 않은 결과가 발생할 수 있습니다. 대신 (또는 그와 동등한 숫자 참조)를 사용하면 이러한 문자를 쉽게 찾을 수 있습니다.

모호한 문자의 예는 U + 00A0 NO-BREAK SPACE입니다. 이 유형의 공간은 줄 바꿈을 방지하지만 문자로 사용될 때 다른 공간과 같습니다. 사용하면 텍스트에서 이러한 공백이 나타나는 위치가 매우 명확 해집니다.


3

정확한 답변은 상황에 따라 다릅니다. 일반적으로 다음 문자가 없어야합니다 ( HTML 5.2 §3.2.4.2.5 ).

텍스트 노드 및 속성 값은 유니 코드 문자로 구성되어야하고 U + 0000 문자를 포함하지 않아야하며 영구적으로 정의되지 않은 유니 코드 문자 (비 문자)를 포함하지 않아야하며 공백 문자 이외의 제어 문자를 포함하지 않아야합니다. 이 사양에는 정확한 컨텍스트에 따라 텍스트 노드의 정확한 값과 속성 값에 대한 추가 제약 조건이 포함됩니다.

HTML 요소의 경우 텍스트 내용 모델의 제약 조건도 요소의 종류에 따라 다릅니다. 예를 들어 textarea는 이스케이프 가능한 원시 텍스트 요소이므로 textarea 요소 내부의 "<"는 HTML에서 이스케이프 할 필요가 없습니다.

이러한 제한 사항은 사양에 흩어져 있습니다. 예를 들어, 속성 값 ( §8.1.2.3 )은 모호한 앰퍼를 포함하지 않아야하며 (i) 비어 있거나 (ii) 작은 따옴표 안에 (따라서 U + 0027 APOSTROPHE 문자를 포함하지 않아야 함 '), (iii) 큰 따옴표 안에 ( U + 0022 QUOTATION MARK 문자 ") 또는 (iv) 따옴표를 포함하지 않아야합니다 ( 다음 제한 사항 포함).

... 리터럴 공백 문자, U + 0022 QUOTATION MARK 문자 ( "), U + 0027 APOSTROPHE 문자 ( '), U + 003D EQUALS SIGN 문자 (=), U + 003C LESS-THAN SIGN 문자 ( <), U + 003E 부호가 큰 문자 (>) 또는 U + 0060 GRAVE ACCENT 문자 (`)이며 빈 문자열이 아니어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.