사용자 제공 데이터를 먼저 인코딩하지 않고 HTML 문서에 삽입 할 수 없습니다. 귀하의 목표는 문서의 구조를 변경할 수 없으며 데이터가 항상 HTML 값 또는 자바 스크립트 코드가 아닌 데이터 값으로 취급된다는 것입니다. 이 메커니즘에 대한 공격은 일반적으로 "교차 사이트 스크립팅"또는 간단히 "XSS"라고합니다.
HTML 속성 값에 삽입하는 경우 문자열로 인해 속성 값이 중간에 종료되지 않도록해야합니다. 물론 태그 자체를 끝낼 수 없도록해야합니다. 안전하다고 보장되지 않는 문자는 HTML 인코딩으로 확인할 수 있습니다.
태그 특성의 값이 큰 따옴표 나 작은 따옴표 쌍 안에 표시되도록 HTML을 작성하면 사용하기 위해 선택한 따옴표 문자 만 html로 인코딩해야합니다. 위의 설명대로 이 아니고이 속성을 올바르게 인용하고 있다면 공백, 기호, 구두점 및 기타 ASCII 제어 문자를 비롯한 더 많은 문자에 대해 걱정할 필요가 있습니다. 솔직하게 말하자면, 어쨌든이 문자가 아닌 영숫자 문자를 인코딩하는 것은 틀림없이 가장 안전합니다..당신은 적절한, HTML에 큰 따옴표 문자를 인코딩해야
두 번 인용 속성 값
<input type="text" value="**insert-here**" />
:
하는 HTML 속성 값이 3 가지 구문 컨텍스트에 나타날 수 있음을 기억하라 "
작은 따옴표로 묶은 속성 값
<input type='text' value='**insert-here**' />
당신은 적절한 HTML 안전한 값으로 작은 따옴표 문자를 인코딩 할 필요가 같은 ‘
지 않은 속성 값
<input type='text' value=**insert-here** />
혹시 HTML 태그가 없어야합니다 속성 값을 따옴표없이 표시하지만 때로는이 값을 제어 할 수 없습니다. 이 경우 공백, 구두점 및 기타 제어 문자에 대해 걱정할 필요가 있습니다. 속성 값에서 벗어날 수 있기 때문입니다.
영숫자 문자를 제외하고는 &#xHH;
형식 (또는 사용 가능한 경우 명명 된 엔터티)을 사용하여 256 미만의 ASCII 값을 갖는 모든 문자를 이스케이프 처리하여 특성이 전환되지 않도록하십시오. 인용 부호 속성은 [space]
%
*
+
,
-
/
;
<
=
>
^
및 |
(등)를 포함하여 많은 문자와 함께 밖으로 나눌 수 있습니다. [para from OWASP]
위의 규칙은 HTML 속성 값에 삽입 할 때 컨트롤 삽입에만 적용된다는 점에 유의하십시오. 페이지의 다른 영역에는 다른 규칙이 적용됩니다.
자세한 내용은 XSS prevention cheat sheet at OWASP을 참조하십시오.
Ahem. 나는 ** 위생 **보다는 위생 **을 의미한다고 생각합니다! –
@ 존 : 당신은 매우 정확할 수 있습니다 : p – Svish
http://xkcd.com/327/이 문제를 설명해야합니다. –